单元测试代码的最佳位置

时间:2013-10-28 08:21:03

标签: c# unit-testing testing nunit

我有一个多项目解决方案,我希望将单元测试应用到。该项目封装良好,大多数单元测试仅使用他们正在测试的项目中的类。

我还有许多集成测试用例,用于测试多个项目的交互。

显然,我可以将所有测试代码放在一个单独的项目中,但我对创建一个在整个解决方案中具有依赖关系的Great Project的想法持谨慎态度。

为每个项目中的单元测试创​​建一个私有类是否更好,并且有一个单独的项目进行集成测试?或者没有明显的建筑效益?

2 个答案:

答案 0 :(得分:4)

您应该将单元测试放入单独的程序集中。通过这样做,您可以确保它们不属于任何已发布的产品。

如果您采用的惯例是测试项目的名称中包含单词Test,那么在最终构建输出中删除通配符是一件简单的事情,以确保您不会发送测试程序集

  

我对创建一个通过整个解决方案具有依赖性的Great Project的想法持谨慎态度

随着您的解决方案规模的扩大,您可以将测试分解为针对应用程序特定区域的程序集 - 您可以从单片测试程序集开始,然后在有意义的时候将其拆分。

答案 1 :(得分:4)

有使用包含单元测试项目在内的约110个项目的解决方案的经验,我可能有一些要添加的内容

  • 与较大的项目相比,拥有许多小项目会增加您的构建时间。根据编辑的大小和复杂程度,这可能是您担心的问题。

我使用过的一个实现使用了类似这样的项目结构:

- CompanyName.Feature
- CompanyName.Fetaure.Test.Unit
- CompanyName.Feature.Test.Integration
- CompanyName.Feature.Test.Load
- etc...

与整体测试项目相比,这种粒度级别是一种改进; 然而,我觉得有更好的方法

而不是打破所有测试,而不是确定您在功能基础上测试功能。那时我会觉得在同一项目中进行单元和集成测试映射到不同的文件夹。理想情况下是这样的:

 - CompanyName.Feature
 - CompanyName.Feature.Test
      \Unit
      \Integration
      \Load
      \etc...
  1. 假设您的代码库当前没有遇到循环依赖的某些问题,这也应该最小化跨越代码库的引用。
  2. 如果您编写任何有助于测试的代码(即:生成测试数据),这也有好处,您可以在单元和集成测试之间共享它。