45

您认为在大型 .net 应用程序中管理单元测试的最佳方式是什么?是为解决方案中的每个单独项目添加一个测试项目,还是为其余项目中的所有测试添加一个大型测试项目更好?

例如,如果一个解决方案中有 10 个项目,是增加 10 个额外的测试项目更好,还是一个大型测试项目足以满足整个解决方案?

我知道模块化测试程序集提供了一些好处,但是使用测试类别可以实现非常相似的事情。许多项目的编译时间较长,但您可以排除此时不需要的项目,而如果您只有一个项目,则不能这样做,但编译所需的时间会少一些。

请在您的答案中概述每个选择的优点/缺点。

4

3 回答 3

39

Phil Haack 写了一篇关于单元测试结构的好文章。这已成为我编写单元测试时的个人最佳实践。这是他的文章的链接http://haacked.com/archive/2012/01/02/structuring-unit-tests.aspx

至于您的问题,我总是会为单元测试创​​建一个单独的项目,并将其命名为 .UnitTests 附加(我这样做是为了区分单元测试和集成测试)。例如,如果我的主项目是 Sample.WebUI,则测试将是 Sample.WebUI.UnitTests。

确实,单元测试会为编译增加额外的时间,但我认为这是一个小问题。我正在研究一个包含 17 个项目(不包括单元测试)的解决方案,编译所有内容大约需要 50-60 秒。差不多有足够的时间把我的眼睛从显示器上移开,看看别的东西来改变一下:-)

关于类别,如果您有一些需要快速完成测试的日常构建,请使用它们并将它们与那些需要更长时间才能完成的测试(如集成测试)区分开来。此外,如果您使用的是 TFS,则使用类别可以帮助自动化和测试您的签入。

于 2012-04-24T14:43:19.117 回答
8

就个人而言,我更喜欢每个真实项目都有一个专门的测试项目。在构建新功能/模块/项目时,我发现能够快速过滤掉其他不相关的测试项目套件要好得多。它使 TDD 周期快得多,以便能够在我开发新项目时快速运行测试。

更重要的是,它可以帮助您根据需要为您的固定装置维护各种测试/模拟类的良好组织,而不会将大量不相关的代码混在一起。它还使新开发人员更容易找到相关的测试。最后,它确保您对特定项目的测试的依赖关系永远不会意外地依赖于另一个不相关的项目。

于 2012-04-24T14:37:25.350 回答
3

我个人的选择是每个项目只有一个测试项目,只有单元测试。这个testproject的文件夹结构和被测试的项目完全一样。除此之外,还可以根据需要制作尽可能多的集成测试项目。

这种方法的主要优点是,当您想要使用 1 个项目并将其用于不同的解决方案时,您总是将测试项目放在一起,以确保当您必须在新解决方案中创造机会时,质量保持不变。

到目前为止,除了在使用一个测试项目时必须替换引用之外,我没有发现任何缺点。

于 2012-04-24T14:41:32.713 回答