如何配置.NET解决方案(C#,.NET 2.0)以允许其他开发人员使用NUnit或MSTest对解决方案使用相同的单元测试?
背景:
在这个项目中,一些开发人员使用VS2005 Team Edition,而其他开发人员使用VS2005 Pro,因此并非所有开发人员都能够运行MSTest.鉴于这是一个企业项目,团队无法使用TestDriven.net或ReSharper.我知道使用VS中的任何一种产品都可以解决这个问题,但考虑到授权购买许可证所需的时间,购买这些产品中的任何一种都不是一个可行的选择.
提前感谢您的帮助,MagicAndi.
我发现的最佳解决方案是使用我在本文中找到的一段简单代码.只需在每个.cs测试文件的命名空间部分中使用此代码段:
#if NUNIT using TestClass = NUnit.Framework.TestFixtureAttribute; using TestMethod = NUnit.Framework.TestAttribute; using TestCleanup = NUnit.Framework.TearDownAttribute; using TestInitialize = NUnit.Framework.SetUpAttribute; using ClassCleanup = NUnit.Framework.TestFixtureTearDownAttribute; using ClassInitialize = NUnit.Framework.TestFixtureSetUpAttribute; #else using Microsoft.VisualStudio.TestTools.UnitTesting; #endif using NUnitAssert = NUnit.Framework.Assert; using MsAssert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;
所述NUNIT
的代码片段是指用于该溶液的自定义生成配置.您可以使用VS Configuration Manager(通过VS工具栏或解决方案属性)创建此项.此外,您需要在方法上替换NUnit的Test属性的所有实例,以使用MSTest TestMethod属性(反之亦然).
编辑:更新了上面的代码片段,以包含Jamie Ide在评论中指出的问题的可能修复.请注意,我还没有设法测试此修复程序.更新的代码段取自Simon在此博客文章中的评论.
如果你不想改变任何测试代码(即不想在顶部添加别名),这个垫片对我有用:
using System; using System.Collections; namespace Microsoft.VisualStudio.TestTools.UnitTesting { public class Placeholder{} public class TestClassAttribute : NUnit.Framework.TestFixtureAttribute { } public class TestInitializeAttribute : NUnit.Framework.SetUpAttribute { } public class TestMethodAttribute : NUnit.Framework.TestAttribute { } public class TestCleanupAttribute : NUnit.Framework.TearDownAttribute { } public class IgnoreAttribute : NUnit.Framework.IgnoreAttribute { } public class ExpectedExceptionAttribute : NUnit.Framework.ExpectedExceptionAttribute { public ExpectedExceptionAttribute(Type exceptionType) : this(exceptionType, null) { } public ExpectedExceptionAttribute(Type exceptionType, string message) : base(exceptionType) { UserMessage = message; } } public class TestContext : NUnit.Framework.TestContext { public TestContext(IDictionary dictionary) : base(dictionary) { } } public class Assert : NUnit.Framework.Assert { public static void IsInstanceOfType(object obj, Type type) { NUnit.Framework.Assert.IsInstanceOfType (type, obj, null); } public static void IsInstanceOfType(object obj, Type type, string message) { NUnit.Framework.Assert.IsInstanceOfType (type, obj, message); } } public class CollectionAssert : NUnit.Framework.CollectionAssert { } }
这对我来说可以通过NUnit运行MSTest(至少在单声道下使用Xamarin Studio).只需包含文件并获取正确的引用(您可能需要不同的项目文件或条件引用),并且您很好.