5

JUnit 是黑盒测试还是白盒测试?我认为它是白盒,但我不确定。我正在寻找,但我找不到明确的答案。即使是对此进行简单的讨论也会很有用。

4

2 回答 2

6

在“JUnit”的名称中使用“单元”一词可能表明 JUnit 仅适用于单元测试,并且由于单元测试实际上是白盒测试的同义词,因此您的怀疑方向是正确的。然而,事情稍微有些微妙。

单元测试,当按照本书完成时,在所有情况下都必须是白盒测试,除非是在测试没有依赖关系的单元时。

对于没有依赖项的单元,单元测试和集成测试之间没有区别(没有要集成的依赖项),因此白盒测试与黑盒测试的概念是不适用的。

对于确实具有依赖关系的单元,单元测试必然是白盒测试,因为为了测试一个单元并且仅测试该单元,您不允许将其与其依赖项集成进行测试,因此您必须剥离其所有依赖关系,并用模拟替换它们,但这样做你声称不仅知道你的单元的依赖关系是什么,而且更重要的是,它以什么方式与它们交互。(它调用了哪些方法,使用了哪些参数等)。

然而,尽管“单元”是其名称的一部分,但 JUnit 本身并不限制您进行单元测试,因此它既没有强加白盒方法也没有强加黑盒方法。您可以使用 JUnit 进行任何您喜欢的测试。

正是添加了一个模拟框架,例如 JMock、Mockito 等,这将使您的测试必然是白盒类型的。

当我使用 JUnit 时,我只做我所说的增量集成测试。这意味着首先我测试所有没有依赖关系的单元,然后我对已经测试依赖关系的单元进行集成测试,依此类推,直到所有内容都测试完毕。在某些情况下,我将一些依赖项替换为面向测试的特殊实现(例如,HSQLDB 而不是实际的磁盘 RDBMS),但我从不使用模拟。因此,我从不进行单元测试,除了没有依赖关系的单元的边缘情况,正如我已经解释的那样,单元测试和集成测试之间没有区别。因此,我不做白盒测试,我做黑盒测试。我使用 JUnit 来完成所有这些工作。(或者我自己的测试平台,它在很大程度上与 JUnit 兼容。)

大多数行业似乎都在使用 JUnit 进行广泛的单元测试(白盒测试)以及它们的集成(黑盒)测试。

于 2013-05-12T07:34:40.813 回答
0

基于白盒测试定义 JUnit 包含在这些测试形式中,包含这些技术:(例如,我们基于代码创建测试或提供测试所有可能路径所需的所有信息。这不仅包括正确的输入,还包括不正确的输入输入,以便也可以验证错误处理程序。)

于 2012-04-25T14:50:36.650 回答