Какой опыт мокирования

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

Ответ

В Go мокирование часто делается с помощью интерфейсов и ручного или автоматического создания моков (например, через mockgen из gomock).

Пример ручного мока:

type DB interface {
    GetUser(id int) (string, error)
}

type MockDB struct{}

func (m *MockDB) GetUser(id int) (string, error) {
    return "test_user", nil
}

func TestService(t *testing.T) {
    mockDB := &MockDB{}
    service := NewService(mockDB)
    // тестируем...
}

Автоматические моки (gomock):

ctrl := gomock.NewController(t)
defer ctrl.Finish()
mockDB := NewMockDB(ctrl)
mockDB.EXPECT().GetUser(1).Return("test_user", nil)

Популярные инструменты:

  • gomock (официальный от Google)
  • testify/mock (проще, но менее строгий)
  • mockery (генерация моков по интерфейсам)

Ключевое — изолировать зависимости через интерфейсы и заменять их в тестах.