我正在研究来自https://github.com/golang/example/tree/master/outyet的outyet示例项目。 test file未涵盖http.Head(url)
返回错误的情况。我想扩展单元测试以涵盖记录错误的if语句(https://github.com/golang/example/blob/master/outyet/main.go#L100)。我想模仿http.Head()
,但我不知道该怎么做。怎么办呢?
答案 0 :(得分:3)
http.Head
函数只调用默认HTTP客户端上的Head
method(公开为http.DefaultClient
)。通过替换测试中的默认客户端,您可以更改这些标准库函数的行为。
特别是,您需要一个设置自定义传输的客户端(实现http.RoundTripper
接口的任何对象)。如下所示:
type testTransport struct{}
func (t testTransport) RoundTrip(request *http.Request) (*http.Response, error) {
# Check expectations on request, and return an appropriate response
}
...
savedClient := http.DefaultClient
http.DefaultClient = &http.Client{
Transport: testTransport{},
}
# perform tests that call http.Head, http.Get, etc
http.DefaultClient = savedClient
您还可以使用此技术通过从传输中返回错误而不是HTTP响应来模拟网络错误。