登录
首页 >  Golang >  Go问答

测试 Go 中处理 json http 响应错误

来源:stackoverflow

时间:2024-02-27 12:45:25 291浏览 收藏

一分耕耘,一分收获!既然都打开这篇《测试 Go 中处理 json http 响应错误》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我目前正在 go 中开发一个图像处理程序,旨在拒绝上传不受支持的文件。我的目的是让 go 程序通过服务器 http.responcewritter 返回一个错误,详细说明已满足哪种拒绝情况,以 json 形式供上传服务使用。

如何在服务器代码中设置错误:

type error struct {
    imghandlererror `json:"error"`
}

type imghandlererror struct {
    message string `json:"message"`
    code    string `json:"code"`
}

func makeerror(message, code string) *error {
    errormessage := &error{
        imghandlererror: imghandlererror{
            message: message,
            code:    code,
        },
    }
    return errormessage
}

func throwerr(errormessage error, writer http.responsewriter) {

    jdata, err := json.marshal(errormessage)
       if err != nil  {
    }

    writer.header().set("content-type", "application/json")
    writer.writeheader(http.statusforbidden)
    writer.write(jdata)

    return

}

如何生成错误并将其写入 http 响应:

errorMes := *MakeError("PSD files are not supported", "DEF-IMG-0006")
ThrowErr(errorMes, res)

目前,这按预期工作,例如,当上传 .psd 时,当前 http 响应会以 json 形式返回。

{"error":{"message":"不支持 psd 文件","code":"def-img-0006"}}

我现在的问题是测试这个,因为我超出了我的深度,因为这是我的第一个 go 程序。我正在使用 ginko 测试套件。我尝试在测试套件中设置 http.responserecorder (因为我认为这就是解决方案所在),但我没有运气。另外,我当前在测试套件中的测试仅测试不需要 writer http.responsewriter 作为参数的功能,因此我不确定是否需要在测试套件中启动服务器以让响应编写器读取.

非常感谢任何帮助


解决方案


我的问题现在正在测试这个,因为我超出了我的深度,因为这是我的 第一个 go 程序。

所以您想要进行一些端到端测试。在您的测试文件中,您可以执行类似的操作。

req := httptest.newrequest("post", "my/v1/endpoint", bytes.newbuffer(payload))
responserecorder = httptest.newrecorder()
router.servehttp(responserecorder, request)

看看 httptest.NewRequesthttptest.ResponseRecorder

本质上,您需要设置路由器,我个人使用 mux 并向其发出请求,就像您是 api 的真正使用者一样。 请求后的responserecorder将包含诸如code之类的字段,用于读取响应代码,以及诸如body之类的字段,用于在其他字段中读取响应正文。

例如

if responseRecorder.Code != 200{
    t.FailNow()
}

理论要掌握,实操不能落!以上关于《测试 Go 中处理 json http 响应错误》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>