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