哪个更好?每个解决方案或每个项目的单元测试项目?

Nik*_*nis 26 nunit unit-testing xunit.net

每个解决方案的单元测试项目或每个项目的单元测试项目是否更好?

根据解决方案,如果您在解决方案中有5个项目,则最终会得到1个单元测试项目,其中包含5个项目中每个项目的测试.

对于每个项目,如果您在解决方案中有5个项目,则最终会有5个单元测试项目.

什么是正确的方法?

我认为这与写单元测试到装配或单独装配中的问题不同?

bry*_*ook 26

程序集是一个打包/部署问题,因此我们通常将它们拆分出来,因为我们不希望将它们与我们的产品一起部署.无论你是按照每个库还是每个解决方案将它们分开,两者都有优点.

最终,您希望测试立即可供所有开发人员使用,以便开发人员知道在需要时可以在何处找到它们.您还需要一个无障碍的环境,只需要很少的开销来编写新的测试,这样您就不会武装那些不想编写测试的愤世嫉俗者.测试还必须快速编译和执行 - 项目结构可以在所有这些中发挥作用.

您可能还需要考虑可能的不同级别的测试,例如单元测试,集成或UI自动化.通过使用测试类别,可以在某些工具中隔离这些类型的测试,但有时如果它们是单独的库,则更容易执行或报告. 

如果您有特殊的包装注意事项,例如模块应用程序,模块之间不应该彼此了解,那么您的测试项目也应该反映这一点.

在没有很多项目的小项目中,1:1的比例通常是首选方法.但是,随着项目数量的增加,Visual Studio性能会迅速下降.大约40个项目标记编译成为编译和运行测试的障碍,因此更大的项目可能会从整合测试项目中受益. 

我倾向于采用务实的方法,因此复杂性适合于问题.通常,应用程序将由若干层组成,其中每个层可具有多个项目.我喜欢从每层一个测试库开始,我使用文件夹模拟解决方案结构.在复杂性需要时划分它.如果您设计测试项目的灵活性,那么转换通常是无痛的.

  • +1"大型项目可能会从整合测试项目中受益". (3认同)
  • 我想我的观点是没有明确的更好的方法,因为答案取决于你的需求.只是保持一致. (2认同)
  • @ImrePühvel——可能。尽管自从我回答这个问题以来 CPU 和 SSD 硬盘得到了改进,但由于依赖链,大多数项目可能会按顺序编译。八年前,在项目之间一遍又一遍地复制文件的性能开销是非常明显的。虽然这方面可能有所减少,但我怀疑您仍然会发现编译 40 个项目比编译 10 个项目花费的时间更长,并且发现和运行更少的测试库也可能更快。指导仍然有效——除非有必要,否则不要心甘情愿地承担复杂性。 (2认同)

Pet*_*lly 9

我会说每个单元测试项目都有一个单独的项目,而不是每个解决方案的一个项目.我认为这样做更好,因为如果您决定从解决方案中取出特定项目并将其移至另一个解决方案,它将为您节省大量麻烦.

  • 如果您担心解决方案中的太多项目"混乱",您可以将所有测试添加到单独的解决方案文件夹中. (3认同)
  • @aceinthehole,当项目数量增加时,解决方案文件夹无助于 Visual Studio 性能下降,正如 bryanbcook 所提到的 (3认同)