Sobes.tech
Back to questions
Senior
4

Как генерируете моки для юнит-тестов?

Companies where asked
Финтехробот

Answer from AI

sobes.tech AI

В Go для генерации моков обычно используют инструменты, которые автоматически создают заглушки интерфейсов на основе их описания. Популярные подходы:

  1. Использование mockgen из пакета gomock
    • Определяете интерфейс.
    • Запускаете mockgen для генерации моков.
    • В тестах создаёте экземпляр мок-объекта и задаёте ожидаемое поведение.

Пример:

//go:generate mockgen -source=service.go -destination=mocks/mock_service.go -package=mocks

// В тесте
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()

mockService := mocks.NewMockMyService(mockCtrl)
mockService.EXPECT().DoSomething(gomock.Any()).Return(nil)
  1. Использование testify/mock

    • Создаёте структуру, встраивающую mock.Mock.
    • Определяете методы с вызовом mock.Called.
  2. Ручное написание моков — подходит для простых случаев, но не масштабируемо.

Автоматическая генерация моков позволяет быстро обновлять заглушки при изменении интерфейсов и поддерживать чистоту кода.