Перейти к основному содержимому

Что такое модульный тест

Модульный тест — это небольшая программа, которая проверяет один фрагмент вашего кода, обычно одну функцию. Тесты запускают после каждого изменения: если изменение что-то сломало, тест сообщит об этом сразу, раньше, чем это заметят пользователи.

В Go есть всё необходимое: пакет testing и команда go test входят в состав инструментов языка. Не нужно ставить дополнительных библиотек и что-то настраивать — достаточно файла рядом с вашим кодом.

Тесты также делают изменения безопасными: с хорошими тестами вы можете переписать функцию и за считаные секунды убедиться, что она ведёт себя по-прежнему.


Файлы тестов и тестовые функции

Тест становится тестом благодаря двум правилам именования:

1. Имя файла заканчивается на _test.go — для calc.go вы пишете calc_test.go. Такие файлы компилируются только командой go test и никогда не попадают в обычную сборку.
2. Функция называется TestXxx — она начинается с Test, дальше идёт заглавная буква, и принимает один аргумент: t *testing.T.

Внутри теста вы вызываете функцию, сравниваете то, что получили (got), с тем, что ожидали (want), и через t сообщаете о падении теста, если значения различаются. Если о падении не сообщено, тест считается пройденным.

Первый успешный тест

TestAdd вызывает Add(2, 3) и сравнивает результат с 5. Значения совпадают, поэтому ничего не сообщается и тест проходит: go test выводит PASS.

Prompt
Напиши файл теста на Go с функцией Add, которая складывает два int, и функцией TestAdd, которая проверяет, что Add(2, 3) равно 5, используя t.Errorf с сообщением в формате got/want, если это не так. Покажи вывод go test -v для успешного запуска.
Вывод: программа на Go и захваченный вывод
A first passing test

Падающий тест

В этой версии Add есть ошибка — она умножает. Тест её обнаруживает: t.Errorf выводит сообщение со значениями got и want, и запуск завершается словом FAIL.

Prompt
Напиши файл теста на Go, в котором функция Add содержит ошибку (она умножает вместо сложения), и функцию TestAdd, которая ожидает, что Add(2, 3) равно 5. Покажи вывод go test -v для падающего запуска вместе с сообщением об ошибке.
Вывод: программа на Go и захваченный вывод

Запуск тестов

go test запускает все тесты в текущей папке. При успехе команда немногословна — одна строка ok — и говорит только тогда, когда что-то падает.

go test -v (подробный режим) перечисляет каждый тест по имени строками === RUN и --- PASS. Используйте этот режим, чтобы увидеть, что именно было запущено. Для всего проекта go test ./... запускает тесты во всех папках.

Два теста, подробный вывод

В файле две тестовые функции — по одной на каждую проверяемую функцию. С флагом -v каждая из них появляется в выводе отдельно, и видно, что обе запустились и обе прошли.

Prompt
Напиши файл теста на Go с двумя небольшими функциями, Double и Half, и одной тестовой функцией для каждой из них. Покажи вывод go test -v, в котором оба теста видны по имени и оба проходят.
Вывод: программа на Go и захваченный вывод