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

首先,您是否会为解决方案中的每个程序集设置一个测试程序集,还是会尝试减少测试程序集的数量?我开始创建许多测试程序集,但我认为这在构建时间方面花费了我们很多。

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

有帮助吗?

解决方案

回答你的第一个问题:

您可以使用类别将所有内容整理成一个单一装配,如果这是你想要的方式。至于它是否会减少构建时间,我可能会猜测一下,但我认为它总体上不是很大。

回答你的第二个问题:

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

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

其他提示

对于你的情况,我将其归结为几个选项:

  • 将现有项目整合为更少的项目,从而整合相应的测试项目 - 尝试思考您是否确实需要 30 个项目(例如 30 个程序集),或者是否最好简单地将它们组合起来以减少依赖项数量并缩短构建时间。

  • 将您的测试放入相应的项目中 - 虽然这可能会引起剧烈反应,但请想一想:考虑到涉及大量测试,获得稍大的程序集的开销可能值得管理两倍于实际需要的项目数量的开销。

  • 将所有单元测试合并到几个项目中 - 如果您坚持保持每个程序集干净且独立,您可以选择组合所有单元测试,可能是根据彼此的相关性。

因此,如果您非常关心构建时间,您还可以进行不包含单元测试的解决方案配置。如果您只是运行测试,这尤其有用 一经请求. 。如果您使用持续集成,那么这应该不是问题:您可以有多个 CI 配置,有些包含构建测试,有些则不包含。

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top