单元测试类VS方法

时间:2013-05-08 19:37:12

标签: unit-testing junit

进行单元测试时,测试类或单个方法是否更好?

我见过的大多数例子都是测试类与其他类不同,模拟类之间的依赖关系。我玩过的另一种方法是模拟你没有测试的方法(通过覆盖),这样你只是在一个方法中测试代码。因此,1个bug会破坏1个测试,因为这些方法是相互隔离的。

我想知道是否存在标准方法,并且隔离每个测试方法与隔离类相比是否有任何大的缺点。

4 个答案:

答案 0 :(得分:1)

短语单元测试来自硬件系统测试,并且在应用于软件时或多或少没有语义。它可以用于从单个例程的隔离测试到使用内存数据库在无头模式下测试完整系统的任何事情。

所以不要相信那些认为定义意味着只有一种方法可以独立于上下文做事的人;有多种方式,其中一些方法有时比其他方式更有用。并且可能每个聪明人都会争论的方法至少在某个地方具有某种价值。

硬件的最小单位是原子,或者可能是某些亚原子粒子。有些人测试软件就像他们扫描每个原子一样,看看量子力学的定律是否仍然存在。其他人乘坐战舰和see if it floats

介于两者之间的东西很可能更好。一旦你了解了你正在制作的东西,那就是软件,你可以开始提出一个适合你应该做的事情的计划。

答案 1 :(得分:0)

单元测试的目的是测试一个代码单元,即类。

这使您可以确信其中的部分代码正在执行预期的操作。

这也是测试过程的第一部分。它有助于尽早捕获那些讨厌的错误,并通过单元测试来证明它可以更容易地进一步解决这个问题。

答案 2 :(得分:0)

可能没有一个标准答案。单元测试是针对开发人员(或他们应该),做对您最有帮助的事情。

测试单个方法的一个缺点是您可能无法测试对象的实际行为。如果某些方法的模拟不准确,可能无法检测到。模拟也是很多工作,它们往往使测试非常脆弱,因为它们使测试关注特定方法调用的发生。

在我自己的代码中,我尽可能地将基础结构类型的依赖项与业务逻辑分开,以便我可以完全编写业务逻辑类的测试而不需要模拟。如果您有一个讨厌的遗留代码库,那么测试单个方法并模拟对象的任何协作方法可能更有意义,以便将这些部分彼此隔离。

理论上,对象应该具有凝聚力,因此将它们作为一个整体进行测试是有意义的。在实践中,很多东西并不是特别面向对象的。在某些情况下,模拟协作者方法比模拟协作者调用的注入依赖项更容易。

答案 3 :(得分:0)

按定义进行单元测试是测试最小的书面代码。 “单位”不是他们的方法。

每个公共方法都应该至少有一个单元测试,专门测试该方法。

如果您遵循上述规则,您最终将进入涵盖班级互动的地方。只要你为每个方法编写1个测试,你也将涵盖类交互。