【发布时间】:2017-03-17 14:46:24
【问题描述】:
在过去的 2 周里,我一直在研究 GODOG,一个像 bdd 一样的黄瓜,用于 golang。我发现它非常有趣,最近我花了更多时间为我的 REST API 编写测试。最近,我一直未能通过我的一项测试。这个包括一个 JSON 结构,它内部有子 JSON。此外,我正在按照以下链接中的确切示例进行测试:
https://github.com/DATA-DOG/godog/tree/master/examples/api
我有一个类似的结构:
type Status struct {
ErrorCode string `json:"ERROR_CODE"`
ErrorText string `json:"ERROR_TEXT"`
}
type OutputResponse1 struct {
Status Status `json:"STATUS"`
}
type OutputResponse2 struct {
Status Status `json:"STATUS"`
Config json.RawMessage `json:"CONFIG"`
}
字节类型变量:
var responseByte []byte
还有两种不同的输出响应:
//--------------1
responseByte, _ = json.Marshal(OutputResponse1{
Status: Status{
ErrorCode: "-2",
ErrorText: "Config was not found",
},
})
//------------2
responseByte, _ = json.Marshal(&OutputResponseSuccess{
Status: Status{
ErrorCode: "0",
ErrorText: " ",},
Config: json.RawMessage(body),
})
json.Rawmessage 来自另一个来源,看起来像:
{
"binaryVersion":"1.0.0",
"configVersion":"1.1.1"
}
现在在功能文件中我测试了这样的内容:
//--------------1
And the response should match json:
{
"STATUS": {
"ERROR_CODE": "-2",
"ERROR_TEXT": "Config was not found"
}
}
本次测试通过
第二个是json.RawMessage
并且响应应该匹配json:
{
"STATUS": {
"ERROR_CODE":"0",
"ERROR_TEXT":" "
},
"CONFIG":{
"binaryVersion":"1.0.0",
"configVersion":"1.1.1"
}
}
现在这个失败了,即使上帝的输出与实际和预期相同
------------------------Acutal output of godog test---------------------------
And the response should match json:
{"STATUS":{"ERROR_CODE":"0","ERROR_TEXT":" "},"CONFIG": {"binaryVersion":"1.0.0","configVersion":"1.1.1"}}
Expected json does not match actual:
{"STATUS":{"ERROR_CODE":"0","ERROR_TEXT":" "},"CONFIG": {"binaryVersion":"1.0.0","configVersion":"1.1.1"}}
--- Failed scenarios:
godog 的人还建议我去掉前导和尾随空格,所以我什至做了
bytes.TrimSpace(responseByte)
还是没有运气。
有人遇到同样的问题吗?
【问题讨论】:
-
从技术上讲,JSON 对象键是无序的,因此您根本不能依赖直接比较它们。
-
实际的中间好像多了一个空格。我不认为 TrimSpace 对你有帮助
-
godog测试输出显示两个json字符串不同,实际输出中的
"CONFIG": {"少了一个空格。这可能只是因为您格式化问题的方式,但如果 godog 正在比较字符串,您应该确保空格匹配。 -
@mkopriva 哦,对不起,当我复制粘贴是 stackoverflow 时,这只是我的拼写错误。实际上 config:{ 是正确的,根本没有空格。
-
@JimB 对不起,吉姆,我应该更具体一些。上面的链接有一个我用于测试的示例。它有忽略 kv 顺序的代码。所以基本上以下内容通过了我的一项测试:{“STATUS”:{“ERROR_TEXT”:“在数据存储中找不到错误配置”,“ERROR_CODE”:“-2”}}{“STATUS”:{“ERROR_CODE” :"-2","ERROR_TEXT":"在数据存储中找不到错误配置"}}