在Golang中测试http json响应的单元

时间:2015-11-11 20:32:07

标签: json go

我使用gin作为我的http服务器并在json中发回一个空数组作为我的回复:

c.JSON(http.StatusOK, []string{})

我得到的json字符串是"[]\n"。换行符由json Encoder对象添加,请参阅here

使用goconvey,我可以测试我的json

So(response.Body.String(), ShouldEqual, "[]\n")

但有没有更好的方法来生成预期的json字符串,而不仅仅是为所有这些字符串添加换行符?

3 个答案:

答案 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,并且具有非常友好的断言错误消息。

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