JavaRush /Курсы /Claude Code SELF /Что такое тест и зачем он нужен

Что такое тест и зачем он нужен

Claude Code SELF
14 уровень , 1 лекция
Открыта

1. Проверять руками — тупик

— Слушай, — пишет Тёма, — а как я вообще докажу что-то? Ну починю. Открою игру, соберу три в ряд, посмотрю на табло. Три показало — значит норм.

— А если багов будет пять? — спрашивает Лёха. — А зон в игре десять? Ты каждую будешь руками щёлкать после каждой правки? Ты вот с этим одним багом сколько раз партию перезапускал, пока поймал?

Тёма прикидывает. Раз пять точно. Собери, глянь, не поверил, ещё раз, ещё.

— Ну штук пять.

— Вот. Пять раз на один баг. А правок за день — десятки. Руками проверять всё после каждой — свихнёшься и всё равно что-нибудь прозеваешь. Устанешь, забудешь, пропустишь. Люди на этом обжигались, пока не придумали простую вещь: пусть машина проверяет за тебя.

2. Тест — это маленький проверяльщик

— Называется это тест, — продолжает Лёха. — Не пугайся слова. Тест — это маленькая программа, у которой одна работа: взять твой код, дать ему известный пример и проверить, правильный ли ответ вышел. Ты один раз описал, что считается правильным, — и дальше машина сама это гоняет, хоть сто раз в секунду, и не устаёт, и не забывает.

— В смысле — программа проверяет программу?

— Именно. Смотри, я тебе покажу тест на твой баг со счётом. Не пугайся, что это код, — читается по-человечески:

test("три в ряд даёт 3 очка", () => {
  if (getScore(3) !== 3) {
    return "ОШИБКА: очки посчитаны неверно";
  }
  return "всё хорошо";
});

— Читай прямо словами, — Лёха ведёт по строчкам. — «Проверка под названием „три в ряд даёт 3 очка". Посчитать очки за три в ряд — это вот getScore(3). Если насчитанное не равно трём — закричать „ОШИБКА". Иначе — сказать „всё хорошо".» Всё. Вот и весь тест.

Тёма читает ещё раз, шевеля губами. getScore(3) — посчитать очки за тройку. !== 3 — «не равно трём». Если не три — ошибка.

— Так это ж… просто, — говорит он. — Тут и программистом быть не надо. «Посчитай. Если не три — ори Ошибкааа!»

— А в этом и есть весь смысл, — кивает Лёха. — Тест — это записанное правило «как должно быть» плюс крик, если стало не так. У тебя сейчас баг: три даёт тридцать. Значит getScore(3) вернёт тридцать. Тридцать не равно трём — тест закричит «ОШИБКА». Вот так он ловит твой баг, не открывая игру и не щёлкая руками.

3. Как тест запускают

— А как я его… запущу? — Тёма ищет кнопку.

— Одной командой. В проекте это обычно команда npm test — «прогони все тесты». Ты её пишешь, а дальше машина сама берёт каждый тест, гоняет и докладывает. Смотри, как выглядит доклад, когда тест нашёл твой баг:

  FAIL  score.test.js
    ● три в ряд даёт 3 очка
      ждали: 3
      получили: 30

FAIL — значит «провалено», красным. — Лёха тычет в строчки. — Тест честно докладывает: ждал три, получил тридцать. Не сошлось — закричал. А вот как он выглядит, когда баг починен и счёт верный:

  PASS  score.test.js
    ✓ три в ряд даёт 3 очка

PASS«пройдено», зелёным. Посчитал, сошлось с тройкой, промолчал-порадовался. Вот и вся азбука: красный FAIL — проверка что-то поймала, зелёный PASS — всё сошлось.

Тёма кивает — эту пару, красное-зелёное, он уже мельком видел, но теперь понял, откуда она берётся.

4. Что вообще проверяют тестами

— И последнее, — говорит Лёха. — Тестами покрывают не всё подряд, а то, где важен точный результат и где легко ошибиться незаметно. Считалка очков, начисление награды, правила игры — вот это. Дал вход, знаешь верный ответ — проверяй тестом.

— А что не покрывают?

— То, что легче проверяется глазами, а не числом. Красиво ли легли кнопки, приятный ли цвет, ровно ли анимация — это тесту не поручишь, тут человек смотрит. Тест силён там, где есть правильный ответ, с которым можно сверить. Твой счёт — ровно такой случай: три в ряд ОБЯЗАНЫ дать три. Есть с чем сверять — есть что тестировать.

Тёма закрывает пример, и в голове укладывается простая картина: тест — это машина-проверяльщик, которой ты один раз сказал «правильно вот так», а она следит за этим вместо тебя. Не магия. Записанное правило и крик, если правило нарушили.

1
Задача
Claude code, 14 уровень, 1 лекция
Недоступна
Issue-to-PR: превратите жалобу из трекера в инженерную постановку
Issue-to-PR: превратите жалобу из трекера в инженерную постановку
1
Задача
Claude code, 14 уровень, 1 лекция
Недоступна
Использование docs lookup как части engineering workflow
Использование docs lookup как части engineering workflow
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ