我在 Grails 中有一个控制器,它以 JSON 格式返回响应。
我写了一个大致像这样工作的测试
test(){
def expectedResponse=JSON.parse('[{"username":"user","startDate":"2010-11-30"}]')
...
def actualResponse=JSON.parse(response.text)
println "Expecting: ${expectedResponse.toString()}"
println "Actual: ${actualResponse.toString()}"
assertEquals(expectedResponse.toString(), actualResponse.toString())
...
}
这按预期工作
Expecting: [{"username":"user","startDate":"2010-11-30"}]
Actual: [{"username":"user","startDate":"2010-11-30"}]
但是,我想知道是否有更好的方法可以在不使用字符串比较的情况下做到这一点。也许可以让我灵活地向响应添加属性而不会使我的测试用例失效?
我可以自己构建它,但我希望在语言中内置某种 JSON 比较。
更新:我尝试直接这样做,没有 toString 并且结果不一致,不太清楚为什么,它在一个阶段工作然后突然得到这个。我看不到我所做的任何会导致差异的代码更改
groovy.lang.MissingMethodException: No signature of method: com.siggysale.MainControllerTests.assertEquals() is applicable for argument types: (org.codehaus.groovy.grails.web.json.JSONArray, org.codehaus.groovy.grails.web.json.JSONArray) values: [[], []]