Все вопросы

39 Практика

Как писать тест?

Тест лежит в файле *_test.go того же пакета. Функция называется TestXxx и принимает *testing.T. Падение — это t.Fatalf или t.Errorf. Запуск из каталога модуля: go test ./....

Таблица случаев в срезе структур держит вход и ожидание рядом. Имя подтеста через t.Run видно в выводе, когда упала одна строка таблицы.

Тест в пакете calc видит неэкспортированные имена. Тест в пакете calc_test проверяет пакет так, как его видит чужой код: только через экспортированное API.

Пример

Go

табличный тест

package calc

import "testing"

func Add(a, b int) int { return a + b }

func TestAdd(t *testing.T) {
    tests := []struct {
        a, b int
        want int
    }{
        {a: 1, b: 2, want: 3},
        {a: -1, b: 1, want: 0},
    }
    for _, tt := range tests {
        if got := Add(tt.a, tt.b); got != tt.want {
            t.Fatalf("Add(%d, %d) = %d, хотим %d", tt.a, tt.b, got, tt.want)
        }
    }
}