我使用gin
作为我的http服务器并在json中发回一个空数组作为我的回复:
c.JSON(http.StatusOK, []string{})
我得到的json字符串是"[]\n"
。换行符由json Encoder对象添加,请参阅here。
使用goconvey
,我可以测试我的json
So(response.Body.String(), ShouldEqual, "[]\n")
但有没有更好的方法来生成预期的json字符串,而不仅仅是为所有这些字符串添加换行符?
答案 0 :(得分:2)
将身体解组成结构并使用Gocheck的DeepEquals https://godoc.org/launchpad.net/gocheck
答案 1 :(得分:2)
首先应该将响应主体解组为结构并与结果对象进行比较。例如:
result := []string{}
if err := json.NewDecoder(response.Body).Decode(&result); err != nil {
log.Fatalln(err)
}
So(len(result), ShouldEqual, 0)
答案 2 :(得分:0)
您可能会发现jsonassert有用。 它在标准库之外没有任何依赖关系,并允许您验证JSON字符串在语义上与您期望的JSON字符串等效。
在您的情况下:
// white space is ignored, no need for \n
jsonassert.New(t).Assertf(response.Body().String(), "[]")
它可以处理任何形式的JSON,并且具有非常友好的断言错误消息。
免责声明:我写了这个程序包。