Go:
Написание тестов
Как:
В Go тесты, как правило, пишутся в том же пакете, что и тестируемый код. Файлы, содержащие тесты, называются с суффиксом _test.go
. Тесты - это функции, которые принимают указатель на объект testing.T (из пакета testing
) в качестве аргумента, и они сигнализируют об ошибке, вызывая методы, такие как t.Fail()
, t.Errorf()
и т.д.
Пример простого теста для функции Add
, определенной в math.go
:
// math.go
package math
func Add(x, y int) int {
return x + y
}
Тестовый файл math_test.go
:
package math
import "testing"
func TestAdd(t *testing.T) {
result := Add(1, 2)
expected := 3
if result != expected {
t.Errorf("Add(1, 2) = %d; хотели %d", result, expected)
}
}
Запускайте ваши тесты с помощью команды go test
в той же директории, что и ваши тестовые файлы. Пример вывода, указывающего на успешное прохождение теста, будет выглядеть следующим образом:
PASS
ok example.com/my/math 0.002s
Для табличных тестов, которые позволяют вам эффективно тестировать различные комбинации входных и выходных данных, определите срез структур, представляющих тестовые случаи:
func TestAddTableDriven(t *testing.T) {
var tests = []struct {
x int
y int
expected int
}{
{1, 2, 3},
{2, 3, 5},
{-1, -2, -3},
}
for _, tt := range tests {
testname := fmt.Sprintf("%d+%d", tt.x, tt.y)
t.Run(testname, func(t *testing.T) {
ans := Add(tt.x, tt.y)
if ans != tt.expected {
t.Errorf("получили %d, хотели %d", ans, tt.expected)
}
})
}
}
Подробнее
Фреймворк для тестирования в Go, представленный в Go 1 наряду с самим языком, был разработан для безшовной интеграции с инструментарием Go, отражая акцент Go на простоту и эффективность в разработке программного обеспечения. В отличие от некоторых фреймворков для тестирования в других языках, которые полагаются на внешние библиотеки или сложные настройки, встроенный пакет testing
в Go предоставляет простой способ написания и запуска тестов.
Интересной особенностью подхода Go к тестированию является принцип соглашения перед настройкой, который он принимает, например, образец именования файлов (_test.go
) и использование функциональных возможностей стандартной библиотеки вместо внешних зависимостей. Этот минималистичный подход поощряет разработчиков писать тесты, поскольку порог входа низкий.
Хотя встроенные средства тестирования в Go охватывают многое, существуют сценарии, в которых сторонние инструменты или фреймворки могут предложить больше функциональностей, таких как генерация моков, фаззинг-тестирование или тесты в стиле разработки, ориентированной на поведение (BDD). Популярные библиотеки, такие как Testify или GoMock, дополняют стандартные возможности тестирования в Go, предлагая более выразительные утверждения или возможности генерации моков, которые могут быть особенно полезны в сложных приложениях с множеством зависимостей.
Несмотря на существование этих альтернатив, стандартный пакет тестирования в Go остается краеугольным камнем для тестирования на Go из-за его простоты, производительности и тесной интеграции с языком и инструментарием. Будь то разработчики решают дополнить его сторонними инструментами или нет, фреймворк для тестирования в Go предоставляет надежную основу для обеспечения качества и надежности кода.