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

Но как и все в жизни, Учиться никогда не поздно 😁. Итак, давайте начнем писать тесты на Go ниже.

Мы напишем небольшие простые программы и напишем для них юнит-тесты. Давайте начнем!

Программа: сделать первую букву имени заглавной

В приведенной выше программе мы определяем функцию UppercaseName, которая получает строку в качестве параметра, затем мы делаем первый символ в строке заглавной и присоединяем фрагмент к новой строке, которая возвращается.

Теперь мы напишем модульный тест для функции UppercaseName. Обычно я использую Table Driven Test, который включает в себя использование среза структур с тестовыми примерами для запуска. Вы можете узнать больше о Table Driven Test здесь — https://blog.golang.org/subtests

Go предоставляет нам готовый пакет для тестирования. Обычно мне нравится комбинировать это с пакетом Testify Assertion, который можно найти здесь. github.com/stretchr/testify/assert

Первым и единственным параметром теста должен быть указатель на тестирование. Имя тестовой функции обычно начинается с Test и слова с заглавной буквы (обычно я использую имя тестируемой функции).

Использование t.Parallel() помогает нам запускать наши тестовые примеры параллельно. Затем мы определяем наши тестовые случаи как срез структуры. В этом случае задана строка, которую мы отправляем в функцию, а ожидается ожидаемый результат от функции.

Мы перебираем срез и запускаем тесты.

Важно отметить строку 22. Поскольку мы запускаем тесты параллельно, добавляя t.Parallel(). При использовании замыкания внутри горутины в тесте будет использоваться только один тестовый пример, и будет казаться, что все тестовые примеры пройдены. Лучшее объяснение можно найти здесь: https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables

Это можно исправить, объявив локальную переменную, как в случае с did в строке 22.

Затем вы можете запустить тест, вызвав:

go test -v ./...