TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.2K subscribers
Post #6984 3.57K
🖥 Зачем запускать coverage на тестах

Если вы всё ещё не проверяете покрытие тестами — самое время начать. Вот пара свежих примеров, почему это важно.

Пример 1: два одинаковых теста — но один не выполняется:
def test_get_install_to_run_with_platform(patched_installs):
i = installs.get_install_to_run("<none>", None, "1.0-32")
assert i["id"] == "PythonCore-1.0-32"
...

def test_get_install_to_run_with_platform(patched_installs): # дублирующее имя
i = installs.get_install_to_run("<none>", None, "1.0-32", windowed=True)
assert i["id"] == "PythonCore-1.0-32"
...


Копировали тест и забыли переименовать? Первый просто не запускается — и вы даже не заметите без отчёта по покрытию. В отчёте будет видно: тест написан, но не выполнялся.
✔️ Переименовали — и всё стало работать.
👉 Без coverage — баги в тестах могут так и остаться незамеченными.

💡 Подсказка: это также ловит ruff F811 и легко решается через @pytest.mark.parametrize.

Пример 2: генератор в тесте, который не сработал:
im = Image.new("RGB", (1, 1))
for colors in (("#f00",), ("#f00", "#0f0")):
append_images = (Image.new("RGB", (1, 1), color) for color in colors)
im_reloaded = roundtrip(im, save_all=True, append_images=append_images)

assert_image_equal(im, im_reloaded)
assert isinstance(im_reloaded, MpoImagePlugin.MpoImageFile)
assert im_reloaded.mpinfo is not None
assert im_reloaded.mpinfo[45056] == b"0100"

for im_expected in append_images:
im_reloaded.seek(im_reloaded.tell() + 1)
assert_image_similar(im_reloaded, im_expected, 1)


Генератор был уже использован внутри roundtrip(), и цикл не выполняется — тест пропускается.
👉 Без coverage — даже не заметите.
✔️ Решение — заменить генератор на list(...).

🟣 Короткий итог: даже если тесты «проходят», это не значит, что они выполняются или действительно что-то тестируют.
🟣 Покрытие — простой способ избежать ложного чувства безопасности.
🟣 Попробуйте coverage run -m pytest && coverage report.

Библиотека питониста #буст
  • 👍 9
  • ❤ 7
  • 🔥 5
More from @pyproglib
  1. Oct 9, 2026Post #7855
  2. Oct 9, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
  3. Oct 7, 2026🎓 С Днём учителя! Учиться никогда не поздно — особенно когда технологии меняются быстрее,…
  4. Oct 3, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  5. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  6. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →