Ответ
Моки и стабы — это тестовые заглушки, но с разными целями.
Стабы — простые заглушки, возвращающие предопределённые данные. Используются для изоляции тестируемого кода от зависимостей.
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)
}
Разница:
- Стаб только возвращает данные.
- Мок ещё и валидирует поведение.