c# - .NET 单元测试项目组织

标签 c# .net unit-testing tdd nunit

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

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

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

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

最佳答案

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

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

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

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

关于c# - .NET 单元测试项目组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10299979/

相关文章:

c# - 使用 C# 缩小 Jpeg 图像的效果不佳

C# Windows 窗体 ComboBox 下拉内容

c# - 为什么我不能同时覆盖和新建一个属性 (C#)?

c# - 从 c# 中的字符串文件路径中删除额外的反斜杠 "\"

php - 使用抽象参数实例化对象

c# - 在 jquery 模态对话框中定义 ui-widget-content 的边框

c# - 开放泛型类型的 CaSTLe Windsor Complex 注册

scala - 避免在 Play 中打开未使用的数据库连接

c# - Moq 上的扩展方法返回 null

c# - 从单个 for 循环生成乘法表