gpt4 book ai didi

java - Java中的随机测试

转载 作者:行者123 更新时间:2023-11-30 08:36:21 27 4
gpt4 key购买 nike

我写了很多单元测试。通常,您需要手动编写经过仔细考虑的测试用例,这是一种白盒测试形式。如果您有幸在一家拥有独立质量保证工程师的公司工作,也许其他人会为您编写测试用例(白盒测试和黑盒测试的混合体)。

然而,很多时候,随机测试会发现很多错误,并且可以作为手写案例的一个很好的补充。

例如,我可能有一个自包含的类,并且能够简单地表达该类的不变性和粗略行为(例如“此方法从不抛出异常”或“此方法始终返回正值” ”)。我想要一个测试框架,它只对我的类进行攻击并检查不变量。

一个类似的案例:我经常有一个类实现与另一个类类似的功能(但它具有不同的性能特征或一些附加功能)。我会以随机方式对 A vs B 测试这两个类。例如,如果我正在实现 TreeMap,我可以使用 HashMap 作为可比较的实现(由于 TreeMap 的排序行为导致的一些差异) ) 并以随机方式检查大部分基本功能。同样,实现 LinkedList 的人可以使用 ArrayList 作为类似的实现,反之亦然。

我过去写过一些基本的东西来做这件事,但是设置所有的样板是很费力的:

  1. 创建具有随机初始状态的对象
  2. 应用随机突变
  3. 为 A 与 B 测试创建“相似”对象之间的映射
  4. 定义不变量和规则,例如“什么时候会抛出异常”

我仍然不时这样做,但我想减少我的努力水平。例如,是否有框架可以删除或简化所需的样板文件?

否则,Java 中使用什么技术进行随机测试?

这与模糊测试相关,但不同。模糊测试似乎侧重于对单个实体的随机输入,希望触发不良行为,通常使用基于动态覆盖观察的自适应输入模型。这涵盖了上面的很多内容,但没有涵盖诸如存在可比实现时的 A vs B 测试或不变检查之类的内容。无论如何,我也对 Java 的体面的模糊测试库感兴趣。

最佳答案

我认为您要查找的是用于 Java 中基于属性的测试 的库(参见 types of randomized testing )。简而言之:不是测试结果的值,而是测试它的属性。例如。而不是检查 2+2 是否为 4,而是检查如下属性:

  • 随机 1 + 0 = 随机 1
  • random1 + random2 >= random1
  • ...

看看this article详细解释了基于属性的测试。

您提到的另一个选择是检查您的测试 Oracle - 知道真正答案的东西(例如旧的防弹算法)。因此,您将一个随机变量同时传递给旧算法和新算法,然后检查结果是否相等。

几个 Java 库:

  • JUnit QuickCheck - 用于基于属性的测试的专用库。允许您定义属性并为这些属性传递随机值以进行检查。到目前为止 (06/2016) 它还很年轻,所以你可能想看看 ScalaCheck因为可以为 Java 代码编写 Scala 测试。
  • Datagen - 用于 Java 的随机值生成器,以防标准随机化器不够用。免责声明:我是作者。

关于java - Java中的随机测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com