В чем разница между испытанием на основе свойств Agitar и Quickcheck?

Несколько лет назад популярным был инструмент тестирования Java под названием Agitar. Он, похоже, сделал что-то вроде тестирования на основе свойств.

В настоящее время популярным является тестирование на основе свойств, основанное на Haskell Quickcheck. На Java есть несколько портов, включая:

Мой вопрос: В чем разница между тестированием на основе свойств Agitar и Quickcheck?

Ответ 1

Для меня ключевыми функциями Haskell QuickCheck являются:

  • Он генерирует случайные данные для тестирования

  • Если тест терпит неудачу, он повторно "сжимает" данные (например, меняет числа на ноль, уменьшая размер списка), пока не найдет простейший тестовый сценарий, который все еще терпит неудачу. Это очень полезно, потому что, когда вы видите простейший тестовый пример, вы часто точно знаете, где ошибка и как ее исправить.

  • Он начинает тестирование с помощью простых данных и постепенно переходит к более сложным данным. Это полезно, потому что это означает, что тесты заканчиваются быстрее. Кроме того, он обеспечивает правильную проверку ошибок (например, пустых списков, нулей).

Quickcheck для Java поддерживает (1), но не (2) или (3). Я не знаю, какие функции поддерживаются Agitar, но было бы полезно проверить.

Кроме того, вы можете посмотреть ScalaCheck. Поскольку Scala совместим с Java, вы можете использовать его для тестирования кода Java. Я не использовал его, поэтому я не знаю, какие функции у него есть, но я подозреваю, что он имеет больше возможностей, чем Java Quickcheck.