我将在工作中开始一个新项目,并想进入单元测试。我们将使用Visual Studio 2008, c#和ASP。NET MVC之类的东西。我正在考虑使用NUnit或Visual Studio 2008的内置测试项目,但我也愿意研究其他建议。是一种系统比另一种更好,还是比另一种更容易使用/理解?

我希望让这个项目成为我们未来发展努力的“最佳实践”。


当前回答

据我所知,目前。net有四个可用的单元测试框架:

NUnit 运行工具 MSTest xUnit

NUnit一直处于领先地位,但在过去一年左右,这种差距已经缩小。我自己还是更喜欢NUnit,特别是他们不久前添加了一个流畅的界面,这使得测试非常易读。

如果您刚刚开始进行单元测试,这可能没有太大区别。一旦你跟上了进度,你就能更好地判断哪个框架最适合你的需求。

其他回答

单元测试框架实际上并不重要,因为你可以用单独的项目文件和条件编译转换测试类(就像这样,Visual Studio→NUnit):

 #if !NUNIT
  using Microsoft.VisualStudio.TestTools.UnitTesting;
 #else
  using NUnit.Framework;
  using TestClass = NUnit.Framework.TestFixtureAttribute;
  using TestMethod = NUnit.Framework.TestAttribute;
  using TestInitialize = NUnit.Framework.SetUpAttribute;
  using TestCleanup = NUnit.Framework.TearDownAttribute;
  using TestContext = System.String;
  using DeploymentItem = NUnit.Framework.DescriptionAttribute;
 #endif

TestDriven。Net插件很好,不是很贵…对于普通的Visual Studio 2008,你必须从你的测试类或测试列表中找到测试。TestDriven。Net中,您可以直接从正在测试的类中运行测试。毕竟,单元测试应该易于维护,并且离开发人员很近。

xUnit是新项目的另一种可能。它的语法可能更直观,但它与其他框架并不兼容。

我收到消息说“NUnit文件结构比VSTest更丰富”… 当然,如果你更喜欢NUnit的文件结构,你可以使用这个解决方案的另一种方式,像这样(NUnit→Visual Studio):

 #if !MSTEST
     using NUnit.Framework;
 #else
     using Microsoft.VisualStudio.TestTools.UnitTesting;
     using TestFixture = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute;
     using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute;
     using SetUp = Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute;
     using TearDown = Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute;
 #endif

或任何其他转换…:-)这里的用法只是编译器的别名。

我从MSTest开始,但我因为一个简单的原因而改变了。MSTest不支持从其他程序集继承测试方法。

我讨厌多次编写相同的测试。特别是在一个大型项目中,测试方法可以很容易地运行到100个测试。

NUnit正是我所需要的。NUnit唯一缺少的是Visual Studio插件,它可以显示每个测试的红色/绿色状态(就像VSTS一样)。

有点偏离主题,但如果你使用NUnit,我可以推荐使用ReSharper -它为Visual Studio UI添加了一些按钮,使它更容易在IDE中运行和调试测试。

这篇评论略显过时,但更详细地解释了这一点:

使用ReSharper作为TDD工具包的重要部分