3

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

我也有一些集成测试用例来测试多个项目的交互。

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

在每个项目中为单元测试创​​建一个私有类并有一个单独的项目进行集成测试会更好吗?还是没有明显的架构优势?

4

2 回答 2

4

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

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

我对创建一个在整个解决方案中具有依赖关系的伟大项目的想法持谨慎态度

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

于 2013-10-28T08:24:50.107 回答
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. 这还有一个好处,如果您编写任何有助于测试的代码(即:测试数据的生成),您可以在单元测试和集成测试之间共享它。
于 2013-10-28T08:39:18.160 回答