Skip to content

Test tips

Andrey Kuchin edited this page May 1, 2020 · 7 revisions

Как измерять покрытие тестами всего репозитория

# Запускаем тесты по всему репозиторию из корня репозитория.
go test -coverpkg=./... -coverprofile=cover.raw ./...
# Удаляем сгенерённые файлы из финального покрытия.
# Генераторы были протестированы своими тестами. Моки
# не нуждаются в тестах, но используя их, мы сразу
# покрываем их на 100%
fgrep -v "easyjson" cover.raw > cover.out1
fgrep -v "mock" cover.out1 > cover.out2
# Проверяем покрытие без сгенерённых файлов.
go tool cover -func=cover.out2

Удобные пакеты для тестов и тесткейсов

github.com/stretchr/testify/require

godoc

Пакет имеет много различных методов для того, чтобы одной командой сопоставить ожидаемое с реальным.

// вместо того, чтобы писать так
got, err := someFoo(arg1, arg2)
if err != nil {
    t.Fatalf("unexpected error while doing someFoo: %s", err)
}
if got != expected {
    t.Fatalf("expected (%v), got (%v)", expected, got)
}
// можно писать вот так
got, err := someFoo(arg1, arg2)
require.NoError(t, err, "unexpected error while doing someFoo")
require.Equal(t, expected, got)

При этом сам пакет имеет отличное форматирование отличия одного от другого.

    TestCheckSessionRequestHeaders/simple: check_session_test.go:124: 
            Error Trace:	check_session_test.go:124
            Error:      	Not equal: 
                            expected: http.Header{"Cookie":[]string{"cookie"}, "Referer":[]string{"http://mail.ru/me"}, "User-Agent":[]string{"ua"}, "X-Real-Ip":[]string{"ip"}}
                            actual  : http.Header{"Cookie":[]string{"cookie"}, "Referer":[]string{"http://mail.ru/me"}, "User-Agent":[]string{"ua"}, "X-Real-Ip":[]string{"i1p"}}
                            
                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -11,3 +11,3 @@
                            (string) (len=9) "X-Real-Ip": ([]string) (len=1) {
                            -  (string) (len=2) "ip"
                            +  (string) (len=3) "i1p"
                            }
            Test:       	TestCheckSessionRequestHeaders/simple
    --- FAIL: TestCheckSessionRequestHeaders/simple (0.00s)