Первое время я писал тесты «потому что надо», не чувствуя смысла, и они скорее раздражали. Потом тест поймал граничный баг — и я по-настоящему записался в фанаты только после того, как понял, что тестирую поведение, а не код ради галочки. Стало легче, когда я перестал гнаться за «покрыть 100%», а спросил: «какие сценарии нельзя сломать молча».

Нейтрально: полезные тесты покрывают важные пути и границы, а не каждую строку. Показатель покрытия — ориентир, а не цель.

def apply_discount(price, percent):
    if not 0 <= percent <= 100:            # граница
        raise ValueError("Процент вне диапазона")
    return price * (1 - percent / 100)

import pytest

def test_границы():
    assert apply_discount(100, 0) == 100
    assert apply_discount(100, 100) == 0
    with pytest.raises(ValueError):
        apply_discount(100, 150)

Удовольствие пришло именно с постановки вопроса «что не должно сломаться», а не «как угодить показателю». Проверить успех, пустое значение и границу — уже покрыл главные риски маленькой функции.