Ответ
Mock — это объект, имитирующий поведение реального компонента в тестах. Используется для изоляции тестируемого кода от зависимостей (БД, API и т.д.).
Пример с gomock:
// Интерфейс для мокирования
type DB interface {
Get(key string) (string, error)
}
// Тест с моком
func TestService(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockDB := NewMockDB(ctrl)
mockDB.EXPECT().Get("test").Return("value", nil)
service := NewService(mockDB)
result, _ := service.DoSomething("test")
assert.Equal(t, "value_processed", result)
}
Плюсы:
- Ускоряет тесты (нет реальных вызовов).
- Позволяет тестировать edge-кейсы (ошибки, таймауты).
Минусы:
- Моки могут стать хрупкими (при изменении интерфейсов).
- Риск "тестирования моков", а не реальной логики.
Лучше использовать для сложных/медленных зависимостей, а не для всего подряд.