В чём разница между моками и стабами

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

Ответ

Моки и стабы — это тестовые заглушки, но с разными целями.

Стабы — простые заглушки, возвращающие предопределённые данные. Используются для изоляции тестируемого кода от зависимостей.

type DBStub struct{}
func (d *DBStub) GetUser(id int) (*User, error) {
    return &User{ID: 1, Name: "Test User"}, nil
}

Моки — более умные заглушки, которые также проверяют вызовы методов (аргументы, количество вызовов).

type DBMock struct {
    mock.Mock
}
func (d *DBMock) GetUser(id int) (*User, error) {
    args := d.Called(id)
    return args.Get(0).(*User), args.Error(1)
}

Разница:

  • Стаб только возвращает данные.
  • Мок ещё и валидирует поведение.