Что такое моки

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

Ответ

Моки (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)
  • Упрощают тестирование, исключая внешние системы