Долго откладывал тесты — казалось, это «для серьёзных проектов», а у меня пет. Потом решил проверить функцию, которая возвращает скидку. Написал простейший pytest... и он упал на границе: при количестве 10 программа выдавала 10% скидки, хотя должна была уже 15. Баг жил в коде давно, а я «починил бы» его на собеседовании не глядя.
Нейтрально: тест — мини-сценарий, который излагает ожидаемое поведение. Полезнее всего тестировать границы и правила, а не «всё подряд».
def discount(count: int) -> int:
if count >= 20:
return 20
if count >= 10:
return 15
return 0
def test_granica():
assert discount(10) == 15
assert discount(19) == 15
assert discount(9) == 0
Поймать свой же баг тестом — редкое по вкусу чувство: и стыдно за неточность, и радостно, что теперь оно не уйдёт молча. Озарение в том, что тест — это не «чтобы отчитаться», а разговор с собственным кодом о том, что он **должен** делать. После этого я начинаю смотреть на свои функции глазами «что тут можно сломать?».