是的,ioutil.NopCloser 正是我所需要的!
我正在尝试测试一种方法,该方法为社交连接端点执行对 facebook API(通过辅助函数)的调用,并且我想模拟来自辅助函数的 facebook 响应,所以我的解决方案如下:
预期的 facebook 响应(转换为我自己的 UserData 结构)是:
UserData {
ID: facebookID,
Email: email,
FirstName: firstName,
LastName: lastName,
}
所以我创建了这样的预期响应:
fbUserData, _ := json.Marshal(UserData{
ID: facebookID,
Email: email,
FirstName: firstName,
LastName: lastName,
})
fbUserDataResponse := &http.Response{
Body: ioutil.NopCloser(bytes.NewBufferString(string(fbUserData))),
}
然后我可以像这样模拟调用 facebook API 的方法的响应:
s.fbGateway.EXPECT().ExecuteGetQuery(userUrl).Return(fbUserDataResponse, nil).Times(1)
这里的重点是,这实际上是关于模拟任何类型的返回 *http.Response 数据的函数(在我的例子中,我通过返回 http 响应的辅助函数调用 facebook API,如上所述)。