同时使用MSTest和NUnit?

同时使用MSTest和NUnit?,nunit,mstest,Nunit,Mstest,在阅读有关MSTest和NUnit的文章时,我真的无法决定在我的项目中使用什么。我们使用TFS 2008和VS2010 我喜欢MSTest,因为它集成到VS2010、持续集成和代码覆盖率报告中。 我喜欢NUnit,因为它允许以一种好的、可读的方式表达复杂的断言语句 我结结巴巴地问社区:两者都可以使用吗 我还考虑坚持使用MSTest和use,以便在制定断言语句时提供更灵活的方法。这不是最好的选择吗 您当然可以有一个使用MSTest的测试项目和另一个使用NUnit的测试项目。如果您想在同一个项目中混

在阅读有关MSTest和NUnit的文章时,我真的无法决定在我的项目中使用什么。我们使用TFS 2008和VS2010

我喜欢MSTest,因为它集成到VS2010、持续集成和代码覆盖率报告中。 我喜欢NUnit,因为它允许以一种好的、可读的方式表达复杂的断言语句

我结结巴巴地问社区:两者都可以使用吗


我还考虑坚持使用MSTest和use,以便在制定断言语句时提供更灵活的方法。这不是最好的选择吗

您当然可以有一个使用MSTest的测试项目和另一个使用NUnit的测试项目。如果您想在同一个项目中混合使用这两种语言,您必须坚持使用通用功能,使用编译器指令和语句来“重命名”并编译为某些语言

不过,您必须同时运行nunit和mstest,以确定是否所有测试都真正通过,因此我强烈建议不要尝试同时使用这两种测试。挑一个


如果您想在构建服务器上运行测试,最好的选择可能是NUnit,除非您也想在构建服务器上安装VS。TFS可能在不安装VS的情况下工作,但您必须检查您的文档。

我个人不喜欢将两个框架混合在一起的想法,就像您所指的中提到的那样

使单元测试在两个测试框架下运行的一个可能条件是,您不希望或无法在持续集成服务器上安装VisualStudio

只是为了澄清,Visual Studio单元测试框架不是在Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll程序集中定义的

要让单元测试在这两种框架下运行,您需要定义一个构建常量(此处为
NUNIT
),并在的帮助下,最终得到如下代码片段:

#if !NUNIT
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Category = Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute;
#else
using NUnit.Framework;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using TestContext = System.Object;
using TestProperty = NUnit.Framework.PropertyAttribute;
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
#endif
我相信这是我第一次想到这个主意。另一篇涉及这一主题的有价值的博文是:


关于你的最后一个问题:这个项目似乎是一个很好的图书馆。如果您喜欢它的流畅风格,我看不出有什么真正的理由不应该使用它。

添加对nunit.framework的引用,并在MSTest tester类的顶部添加以下行

using NAssert = NUnit.Framework.Assert;
现在你可以使用任何一种

// Test whether a new SimplexInterpreter was created
[TestMethod]
public void SimplexInterpreterConstructorTest()
{
    Assert.IsNotNull(target);
    NAssert.IsNotNull(target);
}

我指的是在同一个项目中使用MSTest和NUnit:MSTest作为测试运行者,集成IDE,NUnit作为断言(正如@serbrech在他的博客中所说的那样)。实际上,在选择测试框架时,构建服务器是一个问题。好吧,使用TFS作为构建服务器应该不会在运行单元测试和生成漂亮的报告方面出现问题。所以我想我不知道你想问什么。就我个人而言,我不会试图同时使用这两种框架;看起来这更像是一个值得维护的问题,因为Assert类上的某些方法名称不同。