Skip to content

Latest commit

 

History

History
75 lines (50 loc) · 3.97 KB

3.md

File metadata and controls

75 lines (50 loc) · 3.97 KB

Задание 3

Покрыть проект юнит-тестами.

Функциональные требования

Отсутствуют.

Нефункциональные требования

  1. Добавить в Makefile запуск юнит-тестов с подсчетом покрытия.

  2. Покрытие кода проекта тестами должно быть 80% или больше. В тестах крайне желательно следовать шаблону AAA для повышения читаемости кода.

  3. В документации проекта необходимо отразить способ запуска юнит-тестов и требования к покрытию.

Популярные суффиксы файлов

Следующие популярные суффиксы помогают подчеркнуть принадлежность файла к определенной группе или выделить его особенности:

  • _test.go - юнит-тесты.
  • _mock.go - mock-реализации интерфейсов, используемые в юнит-тестах.
  • _gen.go - исходный код, сгенерированный сторонними утилитами. Не рекомендуется редактировать эти файлы, так как внесенные изменения могут быть потеряны при следующем запуске утилиты.

Рекомендуемые флаги для запуска юнит-тестов

Для получения максимальной пользы от юнит-тестов стоит добавить несколько флагов отключенных по умолчанию:

  1. -race - включает поиск гонок (races) и дедлоков (deadlocks) во время теста. К сожалению с этим флагом прогон тестов начинает потреблять больше памяти, но в большинстве случаев это не должно быть проблемой.

  2. -covermode atomic - на будущее для более сложных тестов с использованием горутин.

  3. -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 - описание известного шаблона написания юнит тестов.