malikov.tech

Как получать еще больше пользы от безопасной разработки на Go (часть 1.5)

Cover Image for Как получать еще больше пользы от безопасной разработки на Go (часть 1.5)

В прошлый раз мы поговорили о базовых практиках. Давайте теперь углубимся в дебри. Тоже не будем шагать сразу во что-то чрезмерно утомительное. Продолжим пока барахтаться на поверхности. Увы хронически не хватает времени на большой пост, поэтому пока выложу маленькую часть.

Контроль покрытия состояний при тестировании. Одна из самых очевидных и идущей красной нитью чрез все мои посты практикой - это написание тестов. Но как упоминалось ранее - важно не только покрытие всех функций, но и покрытие всех состояний функции. Достигается оно к счастью штатными средствами Go. И польза от него не только ради циферки. Практическое применение заключается в том, что приближаясь к 100 процентам покрытия состояния функции, вы получаете две супер важные вещи:

  • Понимание реальных сценариев поведения, а не гипотетических (это кстати часто полярные миры, особенно при тестировании функций удержания соединения и вообще всего, что с сетью связано)
  • Если покрытие не полное и вы не понимаете как его достичь. Это хороший повод задуматься на чистотой функции и заняться её рефакторингом.

Построение карты покрытия делается с помощью выполнения команды:

go test -v -race -buildvcs -coverprofile=/tmp/coverage.out ./...

После чего у вас появится файлик /tmp/coverage.out.

С этим файлом глазками работать сложно, поэтому есть вторая штатная утилита для визуализации этого файла:

go tool cover -html=/tmp/coverage.out

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