12

几年前,一种名为Agitar的 Java 测试工具很流行。它似乎做了一些基于属性的测试。

如今 - 基于Haskell 的 Quickcheck的基于属性的测试很流行。Java 有许多端口,包括:

我的问题是:Agitar 和 Quickcheck 基于属性的测试有什么区别?

4

2 回答 2

12

对我来说,Haskell QuickCheck 的主要特点是:

  1. 它生成用于测试的随机数据

  2. 如果测试失败,它会反复“缩小”数据(例如,将数字更改为零,减小列表的大小),直到找到仍然失败的最简单的测试用例。这非常有用,因为当您看到最简单的测试用例时,您通常会确切地知道错误在哪里以及如何修复它。

  3. 它从简单的数据开始测试,然后逐渐转向更复杂的数据。这很有用,因为这意味着测试失败得更快。此外,它确保正确测试边缘情况(例如,空列表、零)。

Java 的 Quickcheck 支持 (1),但不支持 (2) 或 (3)。我不知道 Agitar 支持哪些功能,但检查一下会很有用。

此外,您可能会查看 ScalaCheck。由于 Scala 可以与 Java 互操作,因此您可以使用它来测试您的 Java 代码。我没用过,所以不知道它有哪些功能,但我怀疑它的功能比 Java Quickcheck 还多。

于 2014-04-24T11:09:50.593 回答
5

值得注意的是,从版本开始0.6junit-quickcheck现在支持shrinking

http://pholser.github.io/junit-quickcheck/site/0.6-alpha-3-SNAPSHOT/usage/shrinking.html

quickcheck自2011 年以来似乎没有任何新版本:

https://bitbucket.org/blob79/quickcheck

于 2016-01-09T01:48:46.003 回答