NUnit,MSTest等之间真的有什么区别吗?

时间:2009-09-14 00:30:36

标签: .net unit-testing

NUnit,MSTest等之间真的有什么不同吗?

例如,它们中的任何一个是否可以检测自上次构建以来更改的代码并且只运行受影响的单元测试?

是否有任何一个与数据库设置/回滚紧密集成以进行集成式测试?

它们中的任何一个是否允许脚本化TCP端口或Web服务来测试通信层?

3 个答案:

答案 0 :(得分:2)

检测自上次构建以来所更改的代码并仅运行受影响的单元测试并不是单元测试框架的责任,而是构建软件/脚本的责任。

就单元测试框架而言,虽然MSTest是最年轻的(我相信),但它们都相当可比。据我所知,它们都没有任何与数据库的隐式(内置)集成,尽管它们都支持测试类和方法的设置和拆卸概念。

它们中的任何一个都将提供调用Web服务等的能力,但就脚本而言,最好留给隔离或模拟框架的TCP端口,而不是单元测试框架。

答案 1 :(得分:1)

您可以使用ant帮助仅运行上次更改的代码的测试,但是,这会破坏单元测试的目的,因为您可能已经破坏了您更改的文件中没有的内容,因此所有测试应该跑了。

您可以设计测试来测试数据库或Web服务层,您可以根据自己的能力做多少。

单元测试的设计存在问题,但这是许多系统常见的问题,pattern density

如果您想进行不同风格的单元测试,可以使用上面的模式密度链接查看可能的解决方案,使用AOP。然后,您可以编写自己的图层,以便使用脚本进行测试。

MS有一个使用TSQL的数据库单元测试框架,但它不会在测试结束时自动执行回滚,但是测试是脚本化的。

答案 2 :(得分:0)

检测自上次构建以来更改的代码并且仅运行受影响的单元测试是Continuous Integration(CI)服务器可以为您执行的操作的一部分。 James Black非常正确,您希望在进行更改时运行相关的测试套件,而不仅仅是一个测试或一个夹具。但是,您可能拥有一个包含一组测试的共享库项目和一个具有自己的测试套件的依赖应用程序项目。对应用程序代码的更改不会影响库代码,因此如果库代码更改,您可以设置CI构建以运行所有测试,但只有应用程序代码在应用程序代码更改时进行测试。 (您可能仍希望进行夜间构建。)这还取决于您的修订/源代码控制系统;根据源代码控制和CI软件的组合,可能无法实现。

Matthew Scharley也是正确的,因为出于单元测试的目的,依赖性最好由隔离/模拟框架处理。 NUnit和MSTest(以及大多数其他xUnit框架)也可用于完全集成测试(使用实际依赖性的测试,例如调用Web服务)。

有关NUnit与MSTest的偏见,请参阅MSBuild, NAnt, NUnit, MSTest, and frustration。对于严格的比较(在另一个方向有些偏颇),请参阅Comparing the MSTest and Nunit Frameworks

从个人角度来看(纯粹的观点),我需要的主要功能已在NUnit中提供,所以我没有理由评估MSTest。 Visual Studio Team System与MSTest紧密集成(我看到了一个很好的演示,可以直观地显示代码覆盖);如果我的公司使用那个(非常昂贵的)VS版本,MSTest可能值得考虑。一个关键问题是,如果我们能够使用我们的CI服务器。