【发布时间】:2012-04-24 18:52:27
【问题描述】:
JUnit 是黑盒测试还是白盒测试?我认为它是白盒,但我不确定。我正在寻找,但我找不到明确的答案。即使是对此进行简单的讨论也会很有用。
【问题讨论】:
标签: testing junit black-box white-box
JUnit 是黑盒测试还是白盒测试?我认为它是白盒,但我不确定。我正在寻找,但我找不到明确的答案。即使是对此进行简单的讨论也会很有用。
【问题讨论】:
标签: testing junit black-box white-box
在“JUnit”名称中使用“单元”一词可能表明 JUnit 仅适用于单元测试,并且由于单元测试实际上是白盒测试的同义词,因此您的怀疑方向是正确的。但是,事情稍微有些微妙。
单元测试,当按照本书完成时,在所有情况下都必须是白盒测试,除非测试没有依赖关系的单元。
对于没有依赖关系的单元,单元测试和集成测试之间没有区别(没有要集成的依赖关系),因此白盒与黑盒测试的概念是不适用的。
对于确实具有依赖关系的单元,单元测试必然是白盒测试,因为为了测试一个单元并且仅测试该单元,您不允许将其与其依赖项集成进行测试,因此您必须剥离它的所有依赖关系都消失了,并用模拟替换它们,但这样做你声称不仅知道你的单元的依赖关系是什么,而且更重要的是,它以什么方式与它们交互。 (它调用了哪些方法,使用了哪些参数等)。
但是,尽管“单元”是其名称的一部分,但 JUnit 本身并不限制您进行单元测试,因此它既不强制采用白盒方法,也没有强加黑盒方法。您可以使用 JUnit 进行任何您喜欢的测试。
添加了一个模拟框架,例如 JMock、Mockito 等,这将使您的测试必然是白盒类型的。
当我使用 JUnit 时,我只做我所说的增量集成测试。 这意味着我首先测试所有没有依赖关系的单元,然后我对已经测试依赖关系的单元进行集成测试,依此类推,直到一切都经过测试。在某些情况下,我将一些依赖项替换为专门用于测试的特殊实现(例如,HSQLDB 而不是实际的磁盘 RDBMS),但我从不使用模拟.因此,我从不进行单元测试,除了没有依赖关系的单元的边缘情况,正如我已经解释的那样,单元测试和集成测试之间没有区别.因此,我从不进行白盒测试,我只进行黑盒测试。我使用 JUnit 来完成所有这些工作。 (或者我自己的测试平台,很大程度上兼容 JUnit。)
大多数行业似乎都在使用 JUnit 进行广泛的单元测试(白盒测试)以及它们的集成(黑盒)测试。
【讨论】:
基于白盒测试定义,JUnit 包含在这些测试形式中,包含以下技术:(例如,我们基于代码创建测试或提供测试所有可能路径所需的所有信息。这不仅包括正确的输入,但输入不正确,因此也可以验证错误处理程序。)
【讨论】: