Skip to content
1 / 15

Как устроен тест в Go: файлы с суффиксом test, t.Error против t.Fatal

Тестовый фреймворк в Go встроен и намеренно скуп. Тесты лежат в файлах с суффиксом _test.go рядом с кодом, функция называется TestИмя и принимает *testing.T. Файл может принадлежать тому же пакету — тогда доступны непубличные идентификаторы — либо пакету с суффиксом _test, и тогда виден только публичный интерфейс: это способ проверить, удобен ли ваш API снаружи. Утверждений вроде assertEquals нет: проверка пишется обычным if, а о провале сообщают двумя способами. t.Error отмечает тест как провалившийся и продолжает выполнение — годится, когда полезно увидеть все несовпадения сразу. t.Fatal прекращает выполнение теста немедленно — нужен там, где дальше идти бессмысленно, например после неудачной подготовки. Ключевая тонкость: t.Fatal вызывает runtime.Goexit, поэтому из другой горутины он не работает так, как ожидается, — там только t.Error.

Как устроен тест в Go: файлы с суффиксом test, t.Error против t.Fatal | JScriptiser