我将在工作中开始一个新项目,并想进入单元测试。我们将使用Visual Studio 2008, c#和ASP。NET MVC之类的东西。我正在考虑使用NUnit或Visual Studio 2008的内置测试项目,但我也愿意研究其他建议。是一种系统比另一种更好,还是比另一种更容易使用/理解?
我希望让这个项目成为我们未来发展努力的“最佳实践”。
我将在工作中开始一个新项目,并想进入单元测试。我们将使用Visual Studio 2008, c#和ASP。NET MVC之类的东西。我正在考虑使用NUnit或Visual Studio 2008的内置测试项目,但我也愿意研究其他建议。是一种系统比另一种更好,还是比另一种更容易使用/理解?
我希望让这个项目成为我们未来发展努力的“最佳实践”。
当前回答
单元测试框架实际上并不重要,因为你可以用单独的项目文件和条件编译转换测试类(就像这样,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是新项目的另一种可能。它的语法可能更直观,但它与其他框架并不兼容。
我从MSTest开始,但我因为一个简单的原因而改变了。MSTest不支持从其他程序集继承测试方法。
我讨厌多次编写相同的测试。特别是在一个大型项目中,测试方法可以很容易地运行到100个测试。
NUnit正是我所需要的。NUnit唯一缺少的是Visual Studio插件,它可以显示每个测试的红色/绿色状态(就像VSTS一样)。
Daok列出了Visual Studio 2008测试项目的所有优点。下面是NUnit的优点。
NUnit has a mocking framework. NUnit can be run outside of the IDE. This can be useful if you want to run tests on a non-Microsoft build server, like CruiseControl.NET. NUnit has more versions coming out than visual studio. You don't have to wait years for a new version. And you don't have to install a new version of the IDE to get new features. There are extensions being developed for NUnit, like row-tests, etc. Visual Studio tests take a long time to start up for some reason. This is better in Visual Studio 2008, but it is still too slow for my taste. Quickly running a test to see if you didn't break something can take too long. NUnit with something like Testdriven.Net to run tests from the IDE is actually much faster. Especially when running single tests. According to Kjetil Klaussen, this is caused by the Visual Studio testrunner. Running MSTest tests in TestDriven.Net makes MSTest performance comparable to NUnit.
随着。net 4.0中代码契约系统的发布和静态检查器的可用性,理论上你将需要编写更少的测试用例,而像Pex这样的工具将有助于识别这些用例。将这一点与前面的讨论联系起来,如果您需要更少地使用单元测试,因为您的契约会覆盖您的尾部,那么为什么不直接使用内置组件呢,因为这样可以少管理一个依赖项。这些天来,我只追求简单。: -)
参见:
微软Pex -自动化单元测试 使用Visual Studio 2010和c# 4.0与Pex生成单元测试
与NUnit相比,我对Visual Studio单元测试的主要不满是Visual Studio测试创建倾向于为私有成员访问注入一堆生成的代码。
有些人可能想测试他们的私有方法,有些人可能不想。那是另一个话题了。
我担心的是,当我编写单元测试时,它们应该被严格控制,这样我才能确切地知道我在测试什么以及我如何测试它。如果有自动生成的代码,我就失去了一些所有权。