Покрыть проект юнит-тестами.
Отсутствуют.
-
Добавить в
Makefile
запуск юнит-тестов с подсчетом покрытия. -
Покрытие кода проекта тестами должно быть 80% или больше. В тестах крайне желательно следовать шаблону
AAA
для повышения читаемости кода. -
В документации проекта необходимо отразить способ запуска юнит-тестов и требования к покрытию.
Следующие популярные суффиксы помогают подчеркнуть принадлежность файла к определенной группе или выделить его особенности:
_test.go
- юнит-тесты._mock.go
- mock-реализации интерфейсов, используемые в юнит-тестах._gen.go
- исходный код, сгенерированный сторонними утилитами. Не рекомендуется редактировать эти файлы, так как внесенные изменения могут быть потеряны при следующем запуске утилиты.
Для получения максимальной пользы от юнит-тестов стоит добавить несколько флагов отключенных по умолчанию:
-
-race
- включает поиск гонок (races) и дедлоков (deadlocks) во время теста. К сожалению с этим флагом прогон тестов начинает потреблять больше памяти, но в большинстве случаев это не должно быть проблемой. -
-covermode atomic
- на будущее для более сложных тестов с использованием горутин. -
-shuffle
- запускает тесты в случайном порядке, чтобы исключить зависимость между ними. Порядок определяется по значению сида (seed), который генерируется перед каждым запуском тестов. Узнать сид можно из логов сразу после запуска.Для того, чтобы иметь возможность запустить тесты в том же порядке, что и в предыдущем прогоне, необходимо добавить следующий код в
Makefile
:SEED := on unit-tests: go test -race -shuffle=$(SEED) ./...
Тогда, зная значение сида, повторный запуск теста будет выглядеть, например, следующим образом:
make coverage SEED=1725189750482165000
-
Go Testing By Example - обзор подходов к написанию юнит-тестов в
Go
. -
Testify - удобный фреймворк, заметно упрощающий написание тестов.
-
Документация
net/http/httptest
- библиотека для написания юнит-тестов. -
AAA pattern - описание известного шаблона написания юнит тестов.