Раздел 29 · Тестирование

Виды тестов и что прячет coverage

junior~40 мин

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

Виды тестов и что прячет coverage

Сцена · лестница уверенности

Представь лестницу. На нижней ступени дешёвый тест: проверил чистую функцию, ответ за миллисекунду. На верхней дорогой: запустил весь продукт, прокликал сценарий как живой пользователь. Чем выше ступень, тем ближе тест к реальности и тем он медленнее, хрупче, дороже в поддержке.

Виды тестов это и есть ступени этой лестницы. А coverage это прибор, который меряет, сколько кода ты прошёл. Прибор полезный, но у него есть слепая зона, и сегодня мы её увидим своими глазами.

Карта урока · что заберёшь

  • разложишь тесты по видам и поймёшь ось “стоимость против уверенности”;
  • узнаешь, что считают line, branch, function и statement coverage;
  • увидишь функцию со стопроцентным покрытием и непойманным багом;
  • включишь coverage на домене Kassa и найдёшь первую обманчиво зелёную строку.

Раздел 1 · виды тестов

Идея словами

Три основных вида различаются по одному признаку: сколько настоящего в тесте.

  • Unit проверяет одну единицу логики в изоляции. Всё внешнее подменено или его просто нет. Чистая функция это идеальный кандидат: ни сети, ни БД, ни времени.
  • Integration проверяет, что несколько настоящих кусков работают вместе: реальный SQL против реальной БД, обработчик HTTP против реального роутера. Браузера нет, но границы внутри системы настоящие.
  • E2E (end to end) проходит весь путь как пользователь: браузер, сервер, база. Максимум реальности и максимум цены.

Рядом стоят отдельные оси, не уровни, а приёмы: contract, property, snapshot, mutation. С каждым из них разберёмся в своём уроке.

Картинка · стоимость против уверенности

Состав набора: цена прогона против уверенности
время прогона в CI0 c
уверенность набора0%

Покрути ползунки. Добавь сто E2E-тестов и посмотри, как время прогона в CI уходит в минуты, а уверенность растёт еле-еле. Потом убери их и добавь юнитов: дёшево, быстро, но “всё ли склеено” по-прежнему неизвестно. Вывод не “юниты лучше” и не “E2E лучше”, а “у каждого вида своя цена за уверенность, и набор надо балансировать”. К форме баланса вернёмся в уроке про пирамиду и трофей.

Что взять с собой

  • вид теста определяется числом настоящих зависимостей в игре;
  • выше по лестнице: дороже, медленнее, ближе к пользователю;
  • contract, property, snapshot, mutation это оси, а не ступени.

дальше после входа

Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.

Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.