2011-03-04 66 views
22

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

对于每个解决方案,如果解决方案中有5个项目,则最终将包含1个包含5个项目中的每个项目的测试的单元测试项目。

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

什么是方式?

我认为这不是同样的问题作为Write Unit tests into an assembly or in a separate assembly?

回答

22

组件是一个打包/部署问题,所以我们通常将它们分开,因为我们不想将它们部署到我们的产品中。无论你将它们分成每个库还是每个解决方案,都有其优点。

最终,您希望测试可以立即供所有开发人员使用,以便开发人员知道何时在需要时找到它们。你也希望有一个无障碍的环境,以最小的开销编写新的测试,这样你就不会武装那些不想写测试的玩世不恭的人。测试也必须快速编译和执行 - 项目结构可以在所有这些方面发挥作用。

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

如果您有特殊的包装注意事项,例如模块应该不知道彼此的模块化应用程序,您的测试项目也应该反映这一点。

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

我倾向于更喜欢实用的方法,以便复杂性适合于问题。通常,应用程序将由几个图层组成,其中每个图层可能有多个项目。我喜欢从每层单个测试库开始,并使用文件夹模拟解决方案结构。在复杂性保证时划分。如果你设计你的测试项目的灵活性,那么转换通常是无痛的。

+1

务实,通常导致一个可接受的方法。它完全适合这里。谢谢! – 2011-03-05 20:26:33

+2

我想我的观点是没有确定的更好的方法,因为答案取决于您的需求。只要一致。 – bryanbcook 2011-03-05 23:23:08

+3

+1,因为“大型项目可能受益于整合测试项目。” – 2013-04-16 10:54:09

8

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

+3

如果您担心解决方案中有太多项目“混乱起来”,则可以将所有测试添加到单独的解决方案文件夹中。 – aceinthehole 2011-03-04 17:45:02

+0

@aceinthehole,当项目数量增长时,解决方案文件夹不会帮助Visual Studio性能下降,因为它是由bryanbcook – 2013-04-16 10:52:42

+0

提到的我一定会这样。像MyApp.ClassLibrary,MyApp.ClassLibrary.UnitTests,MyApp.ClassLibrary.IntegrationTests – 2015-03-13 20:30:40

1

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

1

我将与其中一个“它取决于”的答案。就个人而言,我倾向于将所有测试放在一个项目中,每个程序集项目中都有单独的文件夹(根据需要还有更多的子文件夹)。这使得可以轻松运行整个集合,无论是从VisualStudio还是CruiseControl 。净。

如果您有数千次测试,单个项目可能难以维护。另外,正如彼得凯利在他的回答中所提到的那样,如果你移动一个项目,能够轻松地拆分测试可能是有用的。

2

在一个非常大的系统中,我们在文件和解决方案项目之间有一对一的比例,我们已经达到了每次登记时需要超过90分钟才能建立的点数。我已经创建了只构建测试项目的新解决方案配置,每天进行一次新的配置运行以确保所有测试用例都能正常工作,开发人员可以切换到unittest配置以在其开发环境中测试其代码。 PL。让我知道您的反馈

相关问题