Стандартный пакет testing предоставляет инструменты для написания и выполнения юнит-тестов. Давайте рассмотрим, как писать юнит-тесты с использованием этого пакета.
_test.go
. Это позволяет инструменту тестирования Go автоматически распознавать их как тестовые файлы.Test
и принимать один аргумент типа *testing.T
. Это соглашение позволяет инструменту тестирования Go идентифицировать их как тестовые функции.package main
func Add(a, b int) int {
return a + b
}
// main_test.go
package main
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Add(2, 3) = %d; want %d", result, expected)
}
}
Чтобы это сделать, выполните команду
go test
в терминале. Эта команда автоматически найдет и выполнит все тесты в текущем пакете: $ go test Тестирование с таблицей (table-driven tests): Это подход, при котором вы пишете тесты в виде таблицы входных и ожидаемых значений. Это улучшает читаемость и позволяет легко добавлять новые тестовые случаи.
package main
import "testing"
func TestAdd(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{1, 2, 3},
{0, 0, 0},
{-1, -1, -2},
{2, 2, 4},
}
for _, tt := range tests {
result := Add(tt.a, tt.b)
if result != tt.expected {
t.Errorf("Add(%d, %d) = %d; want %d", tt.a, tt.b, result, tt.expected)
}
}
}
Бенчмаркинг: Для измерения производительности кода используйте функции, начинающиеся с
Benchmark
и принимающие *testing.B
.package main
import "testing"
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(2, 3)
}
}
Примерные тесты (Example Tests)
package main
import "fmt"
func ExampleAdd() {
fmt.Println(Add(2, 3))
// Output: 5
}
TestAdd
для тестирования функции Add
.Запуск тестов
-cover
:$ go test -coverЮнит-тесты пишутся в файлах с суффиксом
_test.go
и выполняются с помощью команды go test
. Они проверяют отдельные функции или методы, чтобы убедиться, что они работают корректно. Пакет testing
предоставляет все необходимые инструменты для написания и выполнения тестов, бенчмарков и примерных тестов.Ставь 👍 и забирай 📚 Базу знаний