Этот вопрос проверяет знание принципов тестирования в Go, включая создание тестов, использование стандартных инструментов для тестирования и лучших практик.
В Go тестирование пакетов осуществляется через файлы, которые заканчиваются на _test.go, содержащие функции с префиксом Test. Для выполнения тестов используется команда go test. Это помогает автоматизировать процесс проверки корректности работы программ.
В Go тестирование производится с использованием стандартной библиотеки testing. Все тесты пишутся в отдельных файлах, которые заканчиваются на _test.go, и в них реализуются функции с префиксом Test. Эти функции тестируют отдельные части кода на предмет их корректности.
Каждый тест должен быть функцией, принимающей объект типа *testing.T. В этой функции вы можете использовать методы из *testing.T для проверки условий, таких как t.Errorf() для вывода ошибок, если тест не пройден.
Пример теста:
package main
import "testing"
func Add(a, b int) int {
return a + b
}
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("Expected 5, got %d", result)
}
}Для запуска тестов нужно использовать команду go test. Эта команда автоматически найдет все тестовые функции в пакете и выполнит их.
Для тестирования нескольких случаев можно использовать таблицы тестов, что позволяет легко проверять различные входные данные и ожидаемые результаты.
Пример:
func TestAdd(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{2, 3, 5},
{5, 7, 12},
{0, 0, 0},
}
for _, test := range tests {
result := Add(test.a, test.b)
if result != test.expected {
t.Errorf("Add(%d, %d) = %d; want %d", test.a, test.b, result, test.expected)
}
}
}Можно запустить тесты только в одном конкретном файле, указав его имя:
go test -v my_test_file.goДля автоматизации проверки функциональности кода.
Когда нужно быстро найти ошибки в изменениях, которые могут повлиять на существующий код.
В случаях, когда необходимо проверять несколько различных входных значений.
Когда вы хотите улучшить покрытие тестами всего кода, включая edge cases.