几年前,一种名为Agitar的 Java 测试工具很流行。它似乎做了一些基于属性的测试。
如今 - 基于Haskell 的 Quickcheck的基于属性的测试很流行。Java 有许多端口,包括:
我的问题是:Agitar 和 Quickcheck 基于属性的测试有什么区别?
几年前,一种名为Agitar的 Java 测试工具很流行。它似乎做了一些基于属性的测试。
如今 - 基于Haskell 的 Quickcheck的基于属性的测试很流行。Java 有许多端口,包括:
我的问题是:Agitar 和 Quickcheck 基于属性的测试有什么区别?
对我来说,Haskell QuickCheck 的主要特点是:
它生成用于测试的随机数据
如果测试失败,它会反复“缩小”数据(例如,将数字更改为零,减小列表的大小),直到找到仍然失败的最简单的测试用例。这非常有用,因为当您看到最简单的测试用例时,您通常会确切地知道错误在哪里以及如何修复它。
它从简单的数据开始测试,然后逐渐转向更复杂的数据。这很有用,因为这意味着测试失败得更快。此外,它确保正确测试边缘情况(例如,空列表、零)。
Java 的 Quickcheck 支持 (1),但不支持 (2) 或 (3)。我不知道 Agitar 支持哪些功能,但检查一下会很有用。
此外,您可能会查看 ScalaCheck。由于 Scala 可以与 Java 互操作,因此您可以使用它来测试您的 Java 代码。我没用过,所以不知道它有哪些功能,但我怀疑它的功能比 Java Quickcheck 还多。
值得注意的是,从版本开始0.6
,junit-quickcheck
现在支持shrinking
:
http://pholser.github.io/junit-quickcheck/site/0.6-alpha-3-SNAPSHOT/usage/shrinking.html
quickcheck
自2011 年以来似乎没有任何新版本: