通过测试称为功能的功能来测试功能的测试方法是否仍是单元测试?


11

如果我们通过测试调用该函数B的函数C来测试函数B,即编写测试程序以测试调用该函数B的函数C,那么该测试方法是否仍称为单元测试,还是其他?

什么时候最好在调用目标函数的函数上进行间接测试,什么时候最好直接对一个函数进行测试?

Answers:


9

单元测试的一个流行定义是ISTQB:

单元测试是应用程序中最小的可测试部分,例如功能,类,过程,接口。单元测试是一种测试源代码的各个单元以确定它们是否适合使用的方法。

根据这个定义:

  • 如果您为B编写测试程序,则它是B的单元测试。
  • 如果您为C编写测试程序,则它是C的单元测试。

现在,意图和测试范围可能有所不同。如果使用C编写针对B的测试程序,它仍然是C的单元测试,因为您所能做的就是向C提供输入,并根据输出检查B是否正确。只是您推断B有效,因为C有效。

集成测试也有一个定义:

进行测试以暴露接口以及集成组件或系统之间的交互中的缺陷。

软件组件的通常定义意味着它是独立的,可以单独部署。在这里,B和C似乎不是独立的组件,因此我们没有集成测试。


5

这在很大程度上取决于您认为什么单位。如果C是如此简单以至于无法单独测试,那么您的测试就是单元测试。

更重要的是,对于特定单元的套件单元测试应具有接近100%的线覆盖率,并测试所有实际预期的代码路径。


1

是的,如果这些函数调用其他函数,我们仍将其称为单元测试。

单元测试应该测试类的公共行为,而不是私有实现。正如Google对厕所文章的测试所建议的那样。

如果您遵循“ 清理代码”的规则,则您的函数不应超过4行代码。这样就不可能不使用单元测试来测试另一个私有功能。

为什么不对大多数私有功能分别进行单元测试?因为重构将迫使您不断更新所有实施单元测试。当您有很多行为时,这将令人沮丧,而重构期间公共行为不应更改,因此测试不需要任何更新。您应该可以与他们的公共父母一起测试私人。有时值得对复杂的私有对象进行测试,但是想知道他们是否应该自己成为一个单独的类?

整合测试

现在,如果函数是另一个类的一部分,则有所不同。然后我们将其称为组件测试或集成测试。您正在集成多个类,并对它们进行测试。功能B将取决于功能C。要能够对功能B进行单元测试,您可以使用依赖注入来隔离要测试的功能,现在它将再次成为单元测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.