Сервис уведомлений невозможно протестировать без реального SMTP-сервера
type Notifier struct {
smtp *mail.SMTPClient
}
func (n *Notifier) OrderPaid(ctx context.Context, o Order) error {
return n.smtp.Send(ctx, o.Email, "Заказ оплачен", render(o))
}
Как сделать Notifier тестируемым без почтового сервера?
- Объявить у Notifier маленький интерфейс и передавать зависимость
- Поднимать SMTP-сервер в каждом юнит-тесте
- Сделать smtp глобальной переменной и подменять её
- Тестировать только функцию render
