我正试图在我的项目中创建一个单元测试,在其中我模拟http客户端并设置客户端必须返回的响应. 我需要这样的行为,因为我的代码需要相应的行为,以防http客户端因超时而失败:因此,我需要模拟http客户端,以返回死线ExceededError,并对其进行单元测试.
到目前为止,我所try 的是以这样一种方式模拟客户端do函数,即返回client.Do:
GetDoFunc = func(*http.Request) (*http.Response, error) {
return nil, &url.Error{
Op: "Post",
Err: context.DeadlineExceeded,
}
}
它可以工作,但不能完全工作,这意味着当我使用这种模拟行为执行代码时,返回的错误类型是:
error(*net/url.Error) *{Op: "Post", URL: "", Err: error(context.deadlineExceededError) {}}
这也是正确的,但并不完全正确.为什么?因为如果我运行代码,并且发生真正的超时,我会得到更完整的结果:
error(*net/url.Error) *{Op: "Post", URL: "http://localhost:4500/scan/", Err: error(*net/http.httpError) *{err: "context deadline exceeded (Client.Timeout exceeded while awaiting headers)", timeout: true}}
我最感兴趣的是那timeout: true
美元.如果我设法告诉我的mock返回它,我可以断言这一点,我发现这比只断言返回的错误是deadlineExceededError类型的更完整.