Долго откладывал тесты — казалось, это «для серьёзных проектов», а у меня пет. Потом решил проверить функцию, которая возвращает скидку. Написал простейший 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

Поймать свой же баг тестом — редкое по вкусу чувство: и стыдно за неточность, и радостно, что теперь оно не уйдёт молча. Озарение в том, что тест — это не «чтобы отчитаться», а разговор с собственным кодом о том, что он **должен** делать. После этого я начинаю смотреть на свои функции глазами «что тут можно сломать?».