Вы боретесь с языком и переносите ваши увлечения ООП на язык, который не предназначен для этого.
Лично я бы изменил направление и использовал бы старые добрые плоские структуры и функции.
Хотя, если вы хотите продолжить свой дизайн, вы можете смоделировать не интерфейс, а целый стек http
. Вы можете тестировать свой код с гораздо большей уверенностью, поскольку вы тестируете реальную http
полезную нагрузку по сравнению с совершением вызовов к вашим интерфейсам.
Ввести HttpClient
в Vehicle
: func NewVehicle(httpClient *http.Client){}
В тестовом коде используйте *http.ServeMux
:
mux.Handle("/path1", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// assessments and mocked response
}))
mux.Handle("/path2", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// assessments and mocked response
}))
// fallback to show not implemented routes
result.mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
result.t.Errorf("Not Supported route %q", r.URL.Path)
}))
Сервер Http сборки:
server := httptest.NewServer(mux)
Создание Http-клиента с сервера мультиплексирования:
client := server.Client()