Я пару раз использовал пользовательский Transport
для тестирования клиентов. Обычно я создавал бы вспомогательные типы и функции для сокращения стандартного кода.
Примерно так могло бы быть началом.
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
)
type roundTripFunc func(*http.Request) (*http.Response, error)
func (r roundTripFunc) RoundTrip(req *http.Request) (resp *http.Response, err error) {
return r(req)
}
func main() {
c := &http.Client{
Transport: roundTripFunc(func(req *http.Request) (resp *http.Response, err error) {
return &http.Response{
StatusCode: 200,
Body: ioutil.NopCloser(bytes.NewBufferString("test")),
}, nil
}),
}
r, _ := c.Get("/")
fmt.Printf("%#v\n", r)
io.Copy(os.Stdout, r.Body)
}
Например, если вы тестируете клиентский API JSON Вы могли бы сделать вспомогательную функцию туда и обратно, заботящуюся о декодировании, кодировании, заголовках и т. д. c. В вашем случае, возможно, вы могли бы сделать заголовок хоста карты функции туда-обратно и URL-путь в пути к файлам?