Раздел 43 · Автотестирование с нуля

Property-based тесты: правило вместо примера

middle~35 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Савва · продакт, #qa-antrakt

Две жалобы за день. Зритель вернул один билет из трёх, и бухгалтерия говорит, что доли билетов в его заказе не сходятся с итогом на две копейки. Второй купил билет за 3 ₽ с промокодом на 500 ₽ и пишет, что скидка вышла больше цены. Глеб клялся, что деньги покрыты тестами. Две копейки ерунда, но в «Ночь продаж» таких заказов будут тысячи, и касса не сойдётся. Можно сделать так, чтобы тесты сами искали такие заказы?

Можно. В прошлом уроке ты строил данные для теста руками: строитель, фабрика, понятные значения. Сегодня данные будет придумывать программа, сотни наборов на каждый прогон. От тебя нужно другое: сказать, что должно быть верно для любого из них.

Проверка подстановкой

Школьник решил уравнение 3x + 7 = 22 и получил x = 5. Учитель не решает уравнение заново. Он подставляет: 3 · 5 + 7 = 22, сходится. Ответа заранее он не знал, и знать было не нужно: правило «подставь корень, получишь верное равенство» работает для любого уравнения и любого ответа.

Примерный тест похож на учителя, который помнит ответы к задачам из учебника. Пока задачи те же, всё хорошо. Дай ему новое уравнение, и он беспомощен: ответа в памяти нет. Учитель с подстановкой проверит хоть тысячу уравнений, не решив ни одного.

На этом и стоят тесты сегодняшнего урока. Вместо «на входе 300000 ждём такой-то список» пишем правило, которое проверяется на любом входе, а входы пусть придумывает генератор.

урок из курса

Урок из курса «Автотестирование с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.