【问题标题】:Which is better? Unit-test project per solution or per project?哪个更好?每个解决方案或每个项目的单元测试项目?
【发布时间】:2011-07-09 00:08:07
【问题描述】:

每个解决方案都有一个单元测试项目还是每个项目有一个单元测试项目更好?

对于每个解决方案,如果您在解决方案中有 5 个项目,您最终会得到 1 个单元测试项目,其中包含对 5 个项目中每一个项目的测试。

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

正确的方法是什么?

我觉得这和Write Unit tests into an assembly or in a separate assembly?不是同一个问题

【问题讨论】:

    标签: unit-testing nunit xunit.net


    【解决方案1】:

    在一个非常大的系统中,我们从文件到解决方案项目的比例是一比一的,我们已经达到了每次签入时构建需要超过 90 分钟的地步。我创建了仅构建测试项目的新解决方案配置,新配置每天运行一次以确保所有测试用例都正常工作,开发人员可以切换到 unittest 配置以在他们的开发环境中测试他们的代码。 PL。让我知道你的反馈

    【讨论】:

      【解决方案2】:

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

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

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

      如果您有特殊的打包注意事项,例如模块化应用程序,其中模块不应相互了解,您的测试项目也应反映这一点。

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

      我倾向于采用务实的方法,以便复杂性适合问题。通常,一个应用程序将由几个层组成,其中每个层可能有多个项目。我喜欢从每层一个测试库开始,我使用文件夹来模仿解决方案结构。在复杂性需要时进行划分。如果您设计的测试项目具有灵活性,那么转换通常是轻松的。

      【讨论】:

      • 务实通常会导致可接受的方法。它非常适合这里。谢谢!
      • 我想我的意思是没有明确的更好的方法,因为答案取决于您的需求。保持一致。
      • +1 表示“大型项目可能会从整合测试项目中受益。”
      • @ImrePühvel - 可能。尽管自从我回答这个问题以来改进了 CPU 和 SSD 硬盘,但由于依赖链,大多数项目可能会按顺序编译。八年前,在项目之间反复复制文件的性能开销非常明显。虽然这方面可能有所减少,但我怀疑您仍然会发现编译 40 个项目比编译 10 个项目花费的时间更长,并且发现和运行更少的测试库也可能更快。指导仍然有效——除非有必要,否则不要心甘情愿地承担复杂性。
      【解决方案3】:

      我将选择其中一个“取决于”答案。就个人而言,我倾向于将所有测试放在一个项目中,每个程序集在项目中都有单独的文件夹(必要时还可以添加更多的子文件夹。)这使得从 VisualStudio 或 CruiseControl 中运行整个集合变得容易.net。

      如果您有数千个测试,那么单个项目可能会难以维护。此外,正如 Peter Kelly 在他的回复中提到的那样,如果您移动项目,能够轻松拆分测试会很有用。

      【讨论】:

        【解决方案4】:

        我个人为每个项目编写一个测试程序集。然后,我为每个解决方案创建一个 nunit 项目,并从中引用所有相关的测试程序集。这反映了项目的组织,意味着如果项目在不同的解决方案中被重用,那么只需要运行相关的单元测试。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 如果您担心解决方案中的项目太多“弄乱”,您可以将所有测试添加到单独的解决方案文件夹中。
          • @aceinthehole,正如 bryanbcook 所提到的,当项目数量增加时,解决方案文件夹对 Visual Studio 性能下降没有帮助
          • 我肯定会走这条路。像 MyApp.ClassLibrary、MyApp.ClassLibrary.UnitTests、MyApp.ClassLibrary.IntegrationTests
          猜你喜欢
          • 1970-01-01
          • 2016-04-27
          • 1970-01-01
          • 1970-01-01
          • 2011-04-08
          • 1970-01-01
          • 1970-01-01
          • 2023-01-26
          • 1970-01-01
          相关资源
          最近更新 更多