如何在大型项目上构建NUnit测试?

时间:2008-10-06 08:56:29

标签: unit-testing nunit

我有兴趣看看我是否可以在包含30多个项目的Visual Studio解决方案中改进我们使用NUnit的方式。

首先,您是否可以为解决方案中的每个装配体进行一次测试装配,或者您是否会尝试保持测试装置的数量减少?我开始创建许多测试程序集,但我认为这在构建时间方面花费了我们很多。

其次,您使用什么策略来管理那些长期运行或需要特殊环境配置的测试?我想编写一个自动运行单元测试的MSBuild脚本,但它需要跳过花费太长时间或在构建机器上无法运行的测试。

4 个答案:

答案 0 :(得分:6)

回答你的第一个问题:

如果您想要的话,可以使用categories将所有内容组织在一个程序集中。至于它是否会减少构建时间,我可能会猜测一下,但我认为它总体上不是很大。

回答你的第二个问题:

您可以使用categories[Explicit]以及[Ignore]属性告诉NUnit要运行哪些测试,以及必须先告诉它运行哪些测试。您可能还需要查看[Platform]或其他一些属性,具体取决于您对“环境”的要求。

例如,您可以为所有长时间运行的测试添加一个Explicit标记。然后你必须明确地运行这些测试,NUnit不会自动运行它们。或者将所有这些测试添加到一个类别中,然后当您运行NUnit时,告诉它明确地不运行该类别。

答案 1 :(得分:3)

对于你的情况,我会把它归结为几个选项:

  • 将您现有的项目整合到更少的项目中,从而为他们整合相应的测试项目 - 尝试思考您是否真的需要30个项目(例如,30个程序集)或者是否更好简单地将它们结合起来以减少依赖性和构建时间。

  • 将测试放入相应的项目中 - 虽然这可能引起剧烈的反应,但请考虑一下:考虑到涉及大量测试,获得稍大的组件的开销可能是值得减少管理实际需要的项目数量两倍的开销。

  • 将所有单元测试合并到一些项目中 - 如果您坚持要保持每个组件的清洁和分离,您可以选择合并所有单元测试,可能就是相互关联。

因此,您还可以制作不包含单元测试的解决方案配置 - 如果构建时间非常重要。如果您只是按需运行测试 ,这将非常有用。如果你正在使用持续集成,那应该不是问题:你可以有多个CI配置,一些包括构建测试,一些不包括。

答案 2 :(得分:1)

这是一个很好的问题,并引发了一些关于为长期运行的大型项目管理大量单元测试的担忧。

我的策略是为您的解决方案中的每个项目提供一个单元测试项目,该项目与业务或框架相关。单元测试非常不适合测试项目的UI方面,我通常将其留给scipted测试。该项目使用连续集成(CI)服务器构建,每次开发人员提交大量工作时都会触发该服务器。 CI服务器还运行所有单元测试以及生成单元测试覆盖率统计。 CI环境使用MSBuild构建解决方案。

随着时间的推移,值得评估是否所有单元测试都是必要的。许多回归测试工作将转向脚本测试,维护单元测试的开销可能很高。理想情况下,我希望在项目的整个生命周期内维护所有单元测试,但维护开销有时会令人望而却步。根据经验,单元测试是针对业务规则和解决方案框架进行的,但不适用于UI,报告或工作流程。显然这取决于你项目的细节。

答案 3 :(得分:0)

除此之外,我们发现TestDriven.Net是NUnit的优秀VisualStudio插件前端,免费供开源使用/学生使用。