公司里用的是NUnit,但是用起来并不觉得好用,因为发现VS的测试代码可以自动生成的。于是大致比较了一下Visual Studio里自带的Unit Test和NUnit的区别。
在stackoverflow上有人讨论过这个问题。下面的条目都是摘自各个网页。做个汇总,方便大家参考。
最表面上来看,用的类库不同,这个问题很好通过一个宏来解决。
#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
NUnit有这样几个优点
1. 独立于IDE,可以单独运行。也可以以命令行方式运行。(vs应该也可以吧?)
2. 版本更新快。(我不认为这是个优点,而且我也并不觉得快啊。)
3. VS的UT工具运行速度慢。(不一定)
NUite也有这样几个缺点
1. 不支持Debug,要安装TestDriven.NET才支持。
2. 不支持代码覆盖率的查看,要和NCover一起用。而VS的代码覆盖很清楚。
3. 不能自动生成测试代码,也许和CodeSmith一起用好些,不过后着要收费的。
补充一点:NCover生成的XML太大了,动不动IE就Crash了,(用NCoverExplorer更好,不过公司没有……)。今天找了半天,都没有找到办法让NCover只生成特定Namespace的数据的命令行参数。最后改了xsl,不显示Method级的XML,好了些。
VS UT最大的缺点——价格!只有VS Pro才支持UT,只有VSTS才支持代码覆盖。
还有人认为VSUT比较难以与CC.NET集成。虽然没有去试着在CC中直接使用VSUT,但是感觉应该是可以的。
再来看一下VS的价格。
With Premium MSDN |
With Professional MSDN |
Without MSDN |
|
VS 2008 Team System |
$10939 |
||
VS 2008 Professional |
$2499 |
$1199 |
$799 |
VS 2008 Standard |
$299 |
最新报价请参考:http://msdn.microsoft.com/en-us/aa700832.aspx
另外,ReSharper(30天试用)、xUnit(开源)、MbUnit也都是UT的不错选择。
参考:http://stackoverflow.com/questions/92869/nunit-vs-visual-studio-2008s-test-projects-for-unit-testing
http://stackoverflow.com/questions/709/net-testing-framework-advice
http://stackoverflow.com/questions/1760/net-unit-testing-packages