Что такое Mock в тестировании

«Что такое Mock в тестировании» — вопрос из категории Тестирование, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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-кейсы (ошибки, таймауты).

Минусы:

  • Моки могут стать хрупкими (при изменении интерфейсов).
  • Риск "тестирования моков", а не реальной логики.

Лучше использовать для сложных/медленных зависимостей, а не для всего подряд.