在 Golang 中单元测试 http json 响应

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

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

我得到的结果 json 字符串是"[]\n". 换行符由 json Encoder 对象添加,请参见此处

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

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

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


慕田峪7331174
浏览 170回答 3
3回答

茅侃侃

您应该首先将响应的主体解组为一个结构体并与结果对象进行比较。例子:result := []string{}if err := json.NewDecoder(response.Body).Decode(&result); err != nil {    log.Fatalln(err)}So(len(result), ShouldEqual, 0)

九州编程

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

慕无忌1623718

您可能会发现jsonassert很有用。它没有标准库之外的依赖项,并允许您验证 JSON 字符串在语义上是否与您期望的 JSON 字符串等效。在你的情况下:// white space is ignored, no need for \njsonassert.New(t).Assertf(response.Body().String(), "[]")它可以处理任何形式的 JSON,并且具有非常友好的断言错误消息。免责声明:我写了这个包。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go