В Части 1 мы рассмотрели концепцию генераторов. Во Части 2 мы добавили бегун поверх них. В Части 3 мы добавили возможность сжатия всем нашим генераторам.
На данный момент наш бегун не использует возможности сжатия, которые мы представили в предыдущей части.
Та же статья на dev.to по адресу: https://dev.to/dubzzz/your-own-property-based-testing-framework-part-4-runners-with-shrink-53f7
Сжиматели были введены в попытке найти наименьший случай отказа. Они достигают одной главной цели: по одному значению вычисляют строго меньшие.
С точки зрения исполнителя, чтобы получить наименьший возможный случай сбоя, мы хотим уменьшить размер, как только обнаружим проблему. Итак, мы генерируем значения и запускаем для них предикат, и как только мы находим проблему, мы берем это значение и уменьшаем его. Более того, перебирая эти сжатые записи, мы можем найти другую, которая не сработает, мы сжимаем ее и повторяем до тех пор, пока не сможем найти более мелкие ошибки.
Процесс обобщен на схеме ниже:
С точки зрения кода, мы можем адаптировать наш miniFc.assert
следующим образом:
Вот и все, наша самодельная структура на основе свойств теперь может генерировать значения, запускать тесты и находить сбои, а в случае неудачи сжимать ее до чего-то меньшего, чтобы помочь нашим пользователям.
Игровой пример доступен по адресу https://runkit.com/dubzzz/part-4-runners-with-shrink.
Но, к сожалению, эта конструкция оказалась недостаточно прочной…
Некоторых вещей в этом фреймворке будет недостаточно, некоторые из этих ограничений подробно описаны в официальной документации fast-check по адресу https://github.com/dubzzz/fast-check/blob/master/documentation/1- Путеводители/HowItWorks.md
В двух словах:
- Наш способ отображения от генератора к другому требует как карты, так и функции отмены карты. К сожалению, реверсирование объекта не всегда осуществимо и может потребовать дополнительной работы только для того, чтобы получить возможность сжатия.
- Наш способ отображения из генератора затрудняет предоставление генератора oneof с возможностями сжатия.
- Генераторы тока слишком фиктивны, они пропускают множество краеугольных случаев. Хотя однородный рандом — это хорошо, поиск ошибок может занять бесконечное время…