每个解决方案都有一个单元测试项目还是每个项目有一个单元测试项目更好?
对于每个解决方案,如果您在解决方案中有 5 个项目,您最终会得到 1 个单元测试项目,其中包含 5 个项目中的每一个的测试。
对于每个项目,如果您在解决方案中有 5 个项目,您最终会得到 5 个单元测试项目。
什么是正确的方法?
我认为这与将单元测试写入程序集或单独的程序集中不是同一个问题?
每个解决方案都有一个单元测试项目还是每个项目有一个单元测试项目更好?
对于每个解决方案,如果您在解决方案中有 5 个项目,您最终会得到 1 个单元测试项目,其中包含 5 个项目中的每一个的测试。
对于每个项目,如果您在解决方案中有 5 个项目,您最终会得到 5 个单元测试项目。
什么是正确的方法?
我认为这与将单元测试写入程序集或单独的程序集中不是同一个问题?
程序集是一个打包/部署问题,因此我们通常将它们分开,因为我们不想将它们与我们的产品一起部署。无论您将它们拆分为每个库还是每个解决方案,两者都有优点。
最终,您希望所有开发人员都可以立即使用测试,以便开发人员知道在需要时可以在哪里找到它们。您还需要一个无障碍环境,以最小的开销编写新测试,这样您就不会武装那些不想编写测试的愤世嫉俗者。测试还必须快速编译和执行——项目结构可以在所有这些中发挥作用。
您可能还需要考虑不同级别的测试是可能的,例如单元测试、集成测试或 UI 自动化测试。在某些工具中,可以通过使用测试类别来分离这些类型的测试,但有时如果它们是单独的库,则执行或报告会更容易。
如果您有特殊的打包考虑,例如模块不应该相互了解的模块化应用程序,那么您的测试项目也应该反映这一点。
在项目不多的小型项目中,1:1 的比例通常是首选方法。但是,随着项目数量的增加,Visual Studio 的性能会迅速下降。大约 40 个项目标记的编译成为编译和运行测试的障碍,因此更大的项目可能会从整合测试项目中受益。
我倾向于采用务实的方法,以便复杂性适合问题。通常,一个应用程序将由几个层组成,其中每个层可能有多个项目。我喜欢从每层一个测试库开始,我使用文件夹来模仿解决方案结构。在复杂性需要时进行划分。如果您设计的测试项目具有灵活性,那么转换通常是无痛的。
我会说每个单元测试项目都有一个单独的项目,而不是每个解决方案一个项目。我认为这更好,因为如果您决定将特定项目从解决方案中取出并将其移至另一个解决方案,它将为您节省很多麻烦。
在一个非常大的系统中,我们从文件到解决方案项目的比例是一比一的,我们已经达到了每次签入时构建需要超过 90 分钟的地步。我创建了仅构建测试项目的新解决方案配置,新配置每天运行一次以确保所有测试用例都正常工作,开发人员可以切换到 unittest 配置以在他们的开发环境中测试他们的代码。PL。让我知道你的反馈
我将选择其中一个“取决于”答案。就个人而言,我倾向于将所有测试放在一个项目中,每个程序集在项目中都有单独的文件夹(必要时加上更多的子文件夹。)这使得从 VisualStudio 或 CruiseControl 中运行整个集合变得容易。网。
如果您有数千个测试,单个项目可能难以维护。此外,正如 Peter Kelly 在他的回复中提到的,如果您移动项目,能够轻松拆分测试可能很有用。
我个人为每个项目编写一个测试程序集。然后,我为每个解决方案创建一个 nunit 项目,并从中引用所有相关的测试程序集。这反映了项目的组织,意味着如果项目在不同的解决方案中重用,那么只需要运行相关的单元测试。