2011-02-18 108 views
23

我的产品组件和我的单元测试组件之间通常有1:1映射。我一般尽量保持组件的总数量低,典型的解决方案可能是这个样子......单个或多个单元测试项目每个解决方案?

  • 客户端(包含浏览器,控制器等)
  • Client.Tests
  • 通用(含数据/服务合同,常用工具等)
  • Common.Tests
  • 服务器(包含域,服务等)
  • Server.Tests
  • Server.WebHos t

最近在工作中,人们一直在提及只有一个单元测试项目与他们正在测试的程序集进行分解。我知道当天回来的时候,如果你使用NCover等作为你的构建的一部分,这会让生活更轻松(当然不再重要)。

单个和多个UnitTest项目背后的一般理性是什么?除了减少解决方案中项目的数量之外,是否有一个具体的理由去某种方式?我觉得这可能是这些“偏好”之一,但谷歌并没有太多变化。

+1

另请参见类似于http://stackoverflow.com/questions/5197192/which-is-better-unit-test-project-per-solution-or-per-project?rq=1 – 2013-04-16 10:47:43

回答

15

没有确定的答案因为这一切都取决于你的工作以及个人的品味。然而,你一定想以某种方式安排事情,所以你可以有效地工作

对于我来说,我想快速找到东西,我想看看什么测试什么,我想运行更小的东西,以便更好地控制,以便在测试中配置文件或做其他事情。当你调试失败的测试时,这通常是很好的。我不想花费额外的时间去思考什么,它应该说明事物如何映射以及属于什么。

另一个对我来说很重要的事情是我想尽可能地隔离并且有明确的界限。你想提供一个简单的方法来重构/移出你的大项目的一部分到一个独立的项目。个人而言,我总是安排自己的软件结构化测试,这意味着类和测试,库和测试可执行文件之间的一对一映射。这为您提供了一个很好的测试结构,它反映了您的软件结构,从而为查找事物提供了清晰度。另外,它提供了一种自然分割,以防某些东西独立移出。

这是我尝试各种方式做事后的个人选择。

在我看来,分组的东西太多时不一定是件好事。它可以是,但我认为在这个讨论的背景下,它是单个测试项目的错误观点。里面有很多文件的测试项目太多意味着只有很多测试文件。我相信真正的问题是你正在开发的解决方案越来越大。也许还有其他的事情可以做,以避免“一个世界”? :)

+0

这几乎与内联我的想法也是如此。根据目前的答案,这绝对是一种喜欢的东西。我认为我会坚持使用我的1:1映射,因为它是我最喜欢的映射,我认为它可以以可预测的方式更加强化/组织结构。感谢您的反馈(打算让Q开放一点,但+1)。 – 2011-02-18 16:06:56

4

我想说的部分原因是它迫使你只征集你正在测试的程序集。所以你的单元测试不会意外地变成集成测试或更糟。它有助于确保顾虑的分离。

1

我对某个特定的标准并不确定,但在我看来,将它们分解为单独的测试项目似乎是一种更好的做法。在我看来,在解决方案/项目级别上与面向对象编程非常类似。假设您的某个项目需要在某处重用,并且希望能够随身携带测试。如果他们与其他测试单独在一个项目中,并且只对该特定项目具有排他性,则只需将该项目也一起转移。否则,你必须通过批量测试项目进行文件捕鱼。

此外,项目的分离有助于在调试时保持整洁。而不是不得不破解一个单一的大型项目,并去挖掘你需要的测试文件,如果你有一个匹配的功能项目测试项目,它会简单得多......大大缩小你的搜索范围。

同样,我认为这是一个优先的事情,我从来没有听说过一个明确的解决办法的一种方式或其他,但我的价值两分钱......

0

我实际上可能去极端如果你考虑在不同的项目中分割你的测试来测试一个程序集,那么这个程序集就太大了..我通常把我的项目分成小的,可重用的组件,用小的1-1映射测试。这当然可能会导致DLL溢出,并且对于某些项目(例如Web项目,在这种情况下,将控制器拆分为不同的程序集时,它不像逻辑上那么干净)可能并不总是可能的。只是一个想法。

9

除了其他(良好)答案之外,请考虑在较大的项目团队中,单个团队成员可能会创建自己的解决方案,以仅包含他们正在开发的项目子集。

假设一个单一的解决方案,一个测试项目涵盖该解决方案中的所有内容,在这种情况下会出现故障。

+0

非常真实的,我已经在一些较大的解决方案(70多个项目)上工作过,我认为他们倾向于邪恶开始;无论如何,绝对是一个好点。 – 2011-02-26 16:24:40

相关问题