我应该总是依赖httptest吗?ResponseRecorder.Result() 在我的断言中?

Should I always rely on httptest.ResponseRecorder.Result() in my assertions?

提问人:A. Gille 提问时间:11/17/2023 更新时间:11/17/2023 访问量:31

问:

我正在为 Golang REST API 处理程序编写一些测试,该处理程序使用以下命令进行测试:httptest

func TestT(t *testing.T) {
    rr := httptest.NewRecorder()
    ctx, _ := gin.CreateTestContext(rr)
    ctx.Request, _ = http.NewRequest(http.MethodGet, "/path", http.NoBody)

    MyHandler(ctx)

    resp := rr.Result()
    defer resp.Body.Close()

    assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
}

问题是,我已经看到很多人直接从记录器测试,而不是返回的响应,例如:Result()

assert.Equal(t, http.StatusBadRequest, rr.Code)
assert.Equal(t, string(body), rr.Body.String())

我知道在做什么和保证,但是围绕测试的干净和最佳实践是什么?Result()httptest.ResponseRecorder

单元测试 Go

评论

0赞 Volker 11/17/2023
正如您肯定知道的那样,ResultRecorder 的某些字段已被弃用,因为您将文档涂红了,不是吗?应该清楚不要使用已弃用的字段。对于代码:它没有被弃用,如果它的 0 值不打扰你,就可以使用它。所有人都说应该很清楚该怎么做:使用结果。当我们谈论惯用语时:你的断言。平等而不是比使用代码更困扰我。if ... == ...

答: 暂无答案