【发布时间】:2016-06-16 01:11:45
【问题描述】:
我写了很多单元测试。通常,您需要手工编写经过仔细考虑的测试用例,这是一种白盒测试。如果你有幸在一家拥有独立质量保证工程师的公司工作,也许其他人会为你编写测试用例(有点像白盒测试和黑盒测试的混合体)。
但是,很多时候,随机测试会发现许多错误,并且可以作为手写案例的重要补充。
例如,我可能有一个自包含的类,并且能够简单地表达该类的不变量和粗略的行为(例如“这个方法从不抛出异常”或“这个方法总是返回一个正值”)。我想要一个测试框架,它只针对我的类并检查不变量。
类似的情况:我经常有一个类实现与另一个类相似的功能(但它具有不同的性能特征或一些附加功能)。我会以随机的方式对这两个班级进行 A 与 B 测试。例如,如果我正在实现TreeMap,我可以使用HashMap 作为可比较的实现(由于TreeMap 的排序行为而对一些差异进行模数)并以随机方式检查大部分基本功能。同样,实现LinkedList 的人可以使用ArrayList 作为类似的实现,反之亦然。
我过去写过一些基本的东西来做这件事,但是将所有样板设置为:
- 创建具有随机初始状态的对象
- 应用随机突变
- 为 A 与 B 测试创建“相似”对象之间的映射
- 定义不变量和规则,例如“何时抛出异常”
我仍然会时不时地这样做,但我想减少我的努力程度。例如,是否有框架可以删除或简化所需的样板?
否则,在 Java 中使用什么技术进行随机测试?
这是相关的,但与模糊测试不同。模糊测试似乎专注于单个实体的随机输入,希望触发不良行为,通常使用基于动态覆盖观察的自适应输入模型。这涵盖了上述很多内容,但不涵盖诸如 A vs B 测试(当存在可比较的实现时)或不变检查之类的内容。无论如何,我也对不错的 Java 模糊测试库感兴趣。
【问题讨论】:
-
这可能与您正在搜索的内容类似:pitest.org
-
我已经编辑了这个问题以删除“给我找一个图书馆”的焦点,所以它现在描述了我的问题(当然,指向图书馆来解决这个问题的答案可能仍然存在 -主题)。
-
@SilasReinagel - 我看过突变测试(pitest 提供的),它非常酷。也就是说,我认为这是对我所追求的一种补充方法——它更多的是随机改变你的应用程序代码以更好地确定测试的有效性,而不是随机生成输入来对你的代码进行单元测试。
-
啊。我不知道有什么工具与您所描述的非常相似。如果您发现任何问题,请务必将它们放在这个问题中。我有兴趣发现它们。
标签: java unit-testing testing