gpt4 book ai didi

rest - 通过测试用例,同时给出 500 作为响应

转载 作者:数据小太阳 更新时间:2023-10-29 03:34:20 26 4
gpt4 key购买 nike

request, err := http.NewRequest("GET", path, nil)
response := httptest.NewRecorder()
r.ServeHTTP(response, request)
var raw map[string]map[string]string
_ = json.Unmarshal(response.Body.Bytes(), &raw)
details := raw["response"]

我有一个 TestFunction,我在其中使用了这段代码。是代码测试 GET 请求的 REST API。

在我的第一个测试用例中,我命中了一个定义的处理程序,而在第二个测试用例中,我命中了一些随机处理程序以使该用例失败。

代码正在通过,但每次第二个测试用例都给出 500 作为响应。

下面是我的测试用例的代码。

func TestGetProviders(t *testing.T) {
type args struct {
path string
handler gin.HandlerFunc
}
tests := []struct {
name string
args args
want bool
}{
{
"First",
args{
"/api/v1/providers",
GetProviders,
},
true,
},
{
"Second",
args{
"/demo",
TheFunc,
},
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
value := copyCodeGet(tt.args.path, tt.args.handler)
if len(value["response"]) > 0 {
statusCode, _ := strconv.Atoi(value["response"]["code"])
if val := statusCode == config.SuccessCode && value["response"]["message"] == config.SuccessMsg; val != tt.want {
t.Errorf("Error is:%v && Status code should be %v, was %d.", value, http.StatusOK, statusCode)
}
}
})
}

}

最佳答案

最后与

进行了一些讨论之后

mkopriva

我能够解决问题。

我一直在 GetErrResponseList 里面使用 Defer c.Request.Body.Close()

func TheFunc(c *gin.Context) { 

GetErrResponseList(c, config.FailureMsg, nil, nil)

}

像这样

func GetErrResponseList(c *gin.Context, msg string, data, count interface{}) { 
defer c.Request.Body.Close()
response := ResponseControllerList{400, 0, msg, data, count}
c.JSON(200, gin.H{
config.Response: response,
})
}

导致问题的原因是不需要在处理程序中关闭请求主体。因此它在它可以使用之前关闭 body ,因此将其移除解决了问题。

关于rest - 通过测试用例,同时给出 500 作为响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52517842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com