Ответ
Моки (mock-объекты) — это фейковые объекты, имитирующие поведение реальных зависимостей в тестах. Они позволяют изолировать тестируемый код, подменя внешние сервисы, базы данных и т.д.
Пример мока в Go (используя библиотеку testify/mock):
type DB interface {
GetUser(id int) (User, error)
}
type MockDB struct {
mock.Mock
}
func (m *MockDB) GetUser(id int) (User, error) {
args := m.Called(id)
return args.Get(0).(User), args.Error(1)
}
func TestService(t *testing.T) {
mockDB := new(MockDB)
mockDB.On("GetUser", 1).Return(User{Name: "Alice"}, nil)
service := NewService(mockDB)
user, err := service.GetUser(1)
assert.NoError(t, err)
assert.Equal(t, "Alice", user.Name)
mockDB.AssertExpectations(t)
}
Ключевые моменты:
- Моки эмулируют поведение зависимостей
- Позволяют проверять вызовы методов (
AssertExpectations) - Упрощают тестирование, исключая внешние системы