Ответ
Testify — популярная и мощная библиотека для тестирования в Go, которая расширяет стандартный пакет testing
. Она значительно упрощает написание тестов, делая их более читаемыми и информативными. Основные пакеты Testify:
-
assert
— предоставляет набор удобных функций для проверки условий (assertions). При неудачной проверке тест продолжается, но с сообщением об ошибке:import "github.com/stretchr/testify/assert" func TestAddition(t *testing.T) { result := 2 + 2 assert.Equal(t, 4, result, "Ожидалось 4, получили %d", result) assert.True(t, result > 3, "Результат должен быть больше 3") }
-
require
— аналогиченassert
, но при неудачной проверке тест немедленно завершается (t.FailNow()
). Это полезно, когда последующие проверки зависят от успешности текущей:import "github.com/stretchr/testify/require" func TestUserCreation(t *testing.T) { user, err := CreateUser("test@example.com") require.NoError(t, err, "Ошибка при создании пользователя") require.NotNil(t, user, "Пользователь не должен быть nil") // Дальнейшие проверки, которые зависят от user }
-
mock
— позволяет создавать мок-объекты для тестирования зависимостей. Это помогает изолировать тестируемый код от внешних сервисов или баз данных:import ( "github.com/stretchr/testify/mock" "testing" ) type MyService struct { Repo Repository } type MockRepository struct { mock.Mock } func (m *MockRepository) GetByID(id int) (string, error) { args := m.Called(id) return args.String(0), args.Error(1) } func TestMyService(t *testing.T) { mockRepo := new(MockRepository) mockRepo.On("GetByID", 1).Return("Test Data", nil) service := MyService{Repo: mockRepo} data, err := service.Repo.GetByID(1) assert.NoError(t, err) assert.Equal(t, "Test Data", data) mockRepo.AssertExpectations(t) }
-
suite
— предоставляет структуру для организации тестов в классы (или структуры в Go) с методамиSetupTest
,TearDownTest
,SetupSuite
,TearDownSuite
для инициализации и очистки ресурсов перед/после тестов или всего набора тестов.
Testify значительно упрощает написание тестов, делает код тестов чище, более выразительным и информативным по сравнению с использованием только стандартного пакета testing
.