我正在尝试在我的项目中创建一个单元测试,我在其中模拟 http 客户端并设置客户端必须返回的响应。我需要这样的行为,因为如果 http 客户端因超时而失败,我的代码需要相应的行为:因此我需要模拟 http 客户端以返回 deadlineExceededError 并对其进行单元测试。
到目前为止我尝试的是以client.Do返回的方式模拟客户端 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。如果我设法告诉我的模拟返回它,我可以断言,我发现它比仅断言返回的错误是deadlineExceededError类型更完整。
繁星淼淼
相关分类