为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中单元测试 http json 响应

在 Golang 中单元测试 http json 响应

Go
慕田峪7331174 2021-11-22 15:34:51
我gin用作我的 http 服务器并在 json 中发回一个空数组作为我的响应:c.JSON(http.StatusOK, []string{})我得到的结果 json 字符串是"[]\n". 换行符由 json Encoder 对象添加,请参见此处。使用goconvey,我可以像测试我的 jsonSo(response.Body.String(), ShouldEqual, "[]\n")但是有没有更好的方法来生成预期的 json 字符串,而不仅仅是向所有这些字符串添加换行符?
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

您应该首先将响应的主体解组为一个结构体并与结果对象进行比较。例子:


result := []string{}

if err := json.NewDecoder(response.Body).Decode(&result); err != nil {

    log.Fatalln(err)

}

So(len(result), ShouldEqual, 0)


查看完整回答
反对 回复 2021-11-22
?
九州编程

TA贡献1785条经验 获得超4个赞

将主体解组为结构体并使用 Gocheck 的 DeepEquals https://godoc.org/launchpad.net/gocheck


查看完整回答
反对 回复 2021-11-22
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您可能会发现jsonassert很有用。它没有标准库之外的依赖项,并允许您验证 JSON 字符串在语义上是否与您期望的 JSON 字符串等效。


在你的情况下:


// white space is ignored, no need for \n

jsonassert.New(t).Assertf(response.Body().String(), "[]")

它可以处理任何形式的 JSON,并且具有非常友好的断言错误消息。


免责声明:我写了这个包。


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信