【问题标题】:What is the difference between Agitar and Quickcheck property based testing?Agitar 和 Quickcheck 基于属性的测试有什么区别?
【发布时间】:2014-05-07 22:08:29
【问题描述】:

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

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

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

【问题讨论】:

  • agitar 是否使用随机测试?那里的属性是如何制定的?请告诉我们更多信息
  • 显然 quickcheck for Java 不支持收缩。此外,AFAICT,它也不会“扩展”,我的意思是它不是从测试最简单的案例开始,然后逐渐使测试变得更加复杂。我不知道其他是否支持收缩和扩展,但这可能是一个需要检查的重要功能。
  • 从描述上看,Agitar 是根据代码生成单元测试的; Quickcheck 不生成测​​试,它使用随机生成的输入测试属性。
  • 谢谢@mhwombat,请将其扩展为答案,我会将其标记为正确。
  • 谢谢@Cubic - 请将其扩展为答案,我会将其标记为正确。

标签: java haskell quickcheck property-based-testing


【解决方案1】:

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

  1. 生成随机数据进行测试

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    quickcheck2011 以来似乎没有任何新版本:

    https://bitbucket.org/blob79/quickcheck

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 1970-01-01
      • 2015-04-20
      • 2011-11-14
      • 1970-01-01
      • 2018-03-30
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多