Это хорошая возможность использовать внедрение зависимостей и интерфейсы.
А именно, нам нужно извлечь концепцию Notifier
(предупреждение: код не тестируется напрямую)
type Notifier interface {
Notify(int, string)() error
}
Теперь, чтобы избежать путаницы с библиотекой notifier
, используйте локальный псевдоним.
import "github.com/myrepo/notifier" mynotifier
Тогда, поскольку используемая библиотека экспортирует ее как функцию, а не вструктура, нам нужно создать структуру, которая реализует наш интерфейс
type myNotifier struct {}
func (mn *myNotifier) Notify(n int, message string) error {
return mynotifier.Notify(n, message)
}
Затем вы модифицируете свою функцию:
func MyHandler(writer http.ResponseWriter, request *http.Request, notifier Notifier) {
// ...
// ...
notifier.Notify(4, "sdfsdf")
// ...
// ...
}
Затем в тесте вы можете свободноотправить в шпион уведомитель
type spyNotifier struct {
called boolean
}
func (n *spyNotifier) Notify(n int, msg string) error {
n.called = true
return
}