Когда я агитирую коллег-программистов создавать больше различных автотестов на их код, они часто жалуются, что это сложная и унылая работа. И в чём-то они правы. При использовании классических юнит-тестов, действительно, нередко приходится писать уйму кода, чтобы проверить каждый отдельный случай поведения. Да и к качеству тестирования порой возникают вопросы, особенно в сложных системах, когда тривиальные сценарии использования проходят на ура, но на каких-то более сложных сценариях, на которые никто
не подумал писать тесты, возникают неприятные проблемы.
Я уже давно слышал про способ тестирования, который используется в
QuickCheck, но всё никак не хватало финального толчка, чтобы им заняться вплотную. Этим толчком стала
эта презентация от Джона Хьюза, автора этой замечательной библиотеки.
В чём заключается QuickCheck-подход
Описать суть подхода можно довольно просто: мы не создаём тесты-примеры, а вместо этого задаём
правила, которые определяют поведение системы на
произвольных входных данных. Библиотека сама генерирует большое количество случайных входных данных и проверяет, соответствует ли поведение кода установленным правилам. Если это не так, то она показывает нам, на каком примере происходит падение теста.
Звучит многообещающе? Вполне.