Хороший вопрос!У меня тоже было немного проблем с этим, когда я начал использовать QuickCheck
, но, поскольку я использовал его чаще, я начал понимать, какие свойства вы должны тестировать.Часто, хорошее место для начала - подумать о том, какие отношения должны поддерживаться между входными данными и выходными данными.Ваша функция находит индексы элемента в списке;Теперь, какие свойства должны иметь в этом случае?Вот два из них, о которых я могу подумать:
- Список индексов должен иметь такое же количество элементов, как и вхождения значения в списке.
- Каждый индекс должен соответствоватьправильное значение.
И вот схема того, как эти свойства могут быть проверены:
- Создайте случайный список, примените к нему
positions
, затем подсчитайте числоиз возвращенных индексов и убедитесь, что оно совпадает с числом вхождений искомого значения. - Создайте случайный список, затем примените к нему
positions
и убедитесь, что элемент в каждом из возвращенных индексов является значениемкоторый был найден.
Я также думаю, что ответ @ chi имеет смысл сказать, что вы должны разрабатывать тесты из спецификации, а не из кода;это связано с тем, что я говорил выше, в том смысле, что спецификация может помочь вам найти отношения между входными данными и выходными данными, которые могут быть не сразу видны из кода.