当前位置:  开发笔记 > 编程语言 > 正文

在使用NUnit和MSTest进行单元测试之间切换

如何解决《在使用NUnit和MSTest进行单元测试之间切换》经验,为你挑选了2个好方法。

如何配置.NET解决方案(C#,.NET 2.0)以允许其他开发人员使用NUnit或MSTest对解决方案使用相同的单元测试?

背景:

在这个项目中,一些开发人员使用VS2005 Team Edition,而其他开发人员使用VS2005 Pro,因此并非所有开发人员都能够运行MSTest.鉴于这是一个企业项目,团队无法使用TestDriven.net或ReSharper.我知道使用VS中的任何一种产品都可以解决这个问题,但考虑到授权购买许可证所需的时间,购买这些产品中的任何一种都不是一个可行的选择.

提前感谢您的帮助,MagicAndi.



1> 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在此博客文章中的评论.


此外,至少有一个assert方法IsInstanceOfType不兼容,因为参数顺序相反。

2> Tim Erickson..:

如果你不想改变任何测试代码(即不想在顶部添加别名),这个垫片对我有用:

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).只需包含文件并获取正确的引用(您可能需要不同的项目文件或条件引用),并且您很好.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有