在Go中测试通过json http responce返回的错误

在Go中测试通过json http responce返回的错误,go,Go,我目前正在使用Go中的一个图像处理程序,用于拒绝上传不受支持的文件。我的目的是让Go程序通过servers http.responceWriter返回一个错误,详细说明上传服务使用的拒绝情况(如json) 如何在服务器代码中设置错误: type Error struct { ImgHandlerError `json:"error"` } type ImgHandlerError struct { Message string `json:"message"` Code

我目前正在使用Go中的一个图像处理程序,用于拒绝上传不受支持的文件。我的目的是让Go程序通过servers http.responceWriter返回一个错误,详细说明上传服务使用的拒绝情况(如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

{错误:{消息:不支持PSD文件,代码:DEF-IMG-0006}

我的问题是现在测试这个,因为我已经超出了我的深度,因为这是我的第一个围棋程序。我用的是银杏测试套件。我已经尝试设置http.ResponseRecorder,因为我认为解决方案就在测试套件中,但我没有运气。此外,我目前在测试套件中的测试仅测试不需要writer http.ResponseWriter作为参数的函数,因此我不确定是否需要启动测试套件中的服务器,以便从中读取响应writer

非常感谢您的帮助

我的问题是现在测试这个,因为我已经超出了我的深度,因为这是我的 先走计划

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

req := httptest.NewRequest("POST", "my/v1/endpoint", bytes.NewBuffer(payload))
responseRecorder = httptest.NewRecorder()
router.ServeHTTP(responseRecorder, request)
看一看,然后

基本上你需要设置你的路由器,我个人使用mux并向它发出请求,就像你是API的真正消费者一样。 请求后的responseRecorder将在其他字段中包含用于读取响应代码的代码和用于读取响应正文的Body等字段

e、 g


http.NewRequest用于使用http.Client发出请求。对于像这样的直接测试,您应该使用,因为它是为此目的而构建的。感谢您指出这一点,我对我的答案进行了调整。如果我可以问的话,这个变化对测试意味着什么?
if responseRecorder.Code != 200{
    t.FailNow()
}