Groovy 使用spock测试复杂的JSON字符串条件永远不会令人满意

Groovy 使用spock测试复杂的JSON字符串条件永远不会令人满意,groovy,spock,Groovy,Spock,你好, 我有一个返回JSON字符串的函数。我想测试我的函数是否正确创建了JSON格式。然而,我有一个问题,可能是一些转义字符的测试总是失败 这是我期望的正确JSON格式,并针对其进行测试: org.spockframework:spock-core:0.7-groovy-2.0 Gradle 1.12 Groovy 1.8.6 但是,由于双引号和[]字符,设置条件很困难。我试图逃离他们 这就是功能: {"function":"verifyEmail","parameters":[{"email

你好,

我有一个返回JSON字符串的函数。我想测试我的函数是否正确创建了JSON格式。然而,我有一个问题,可能是一些转义字符的测试总是失败

这是我期望的正确JSON格式,并针对其进行测试:

org.spockframework:spock-core:0.7-groovy-2.0
Gradle 1.12
Groovy 1.8.6
但是,由于
双引号
[]
字符,设置条件很困难。我试图逃离他们

这就是功能:

{"function":"verifyEmail","parameters":[{"email_pwd":"password","session_id":"S1234","snapz_id":"T1234","email":"a@hotmail.com","access_token":"abcd"}]}
这就是结果:

def 'Parse the string to create JSON object'() {
    setup:
    def requestFactory = new RequestFactory();
    def snapzJSON = requestFactory.createWSRequest(FunctionReq.VERIFY_EMAIL, accessToken, sessionId, snapzId, email, emailPwd)

    expect: 'Correctly formats JSON string'
    System.out.println("SPOCK TEST: " + snapzJSON.createJSONRequest())
    snapzJSON.createJSONRequest()  == '{\"function\":\"verifyEmail\",\"parameters\":\\[{\"email_pwd\":\"password\",\"session_id\":\"S1234\",\"snapz_id\":\"T1234\",\"email\":\"a@hotmail.com\",\"access_token\":\"abcd\"}\\]}'        
}
有没有更简单的方法

非常感谢您的建议

测试结果的一些附加输出:

Condition not satisfied:

snapzJSON.createJSONRequest()  == '{\"function\":\"verifyEmail\",\"parameters\":\\[{\"email_pwd\":\"password\",\"session_id\":\"S1234\",\"snapz_id\":\"T1234\",\"email\":\"a@hotmail.com\",\"access_token\":\"abcd\"}\\]}'
|         |                    |
|         |                    false
|         [parameters:[[session_id:S1234, snapz_id:T1234, email:a@hotmail.com, email_pwd:password, access_token:abcd]], function:verifyEmail]
abcd S1234 T1234 a@hotmail.com password
在这方面:

jsonObject: {"parameters":[{"session_id":"S1234","snapz_id":"T1234","email":"a@hotmail.com","email_pwd":"password","access_token":"abcd"}],"function":"verifyEmail"}
SPOCK TEST: [parameters:[[session_id:S1234, snapz_id:T1234, email:a@hotmail.com, email_pwd:password, access_token:abcd]], function:verifyEmail]
您正在将
String
Map
进行比较。您需要解析右侧的JSON字符串(使用
JsonSlurper
)并比较值。当使用单引号时,也不需要使用esacpe

您还可以使用
JsonOutput
将左侧(
snapzJSON.createJSONRequest()
序列化为字符串),然后进行比较

比较地图要好得多

snapzJSON.createJSONRequest()  == '{\"function\":\"verifyEmail\",\"parameters\":\\[{\"email_pwd\":\"password\",\"session_id\":\"S1234\",\"snapz_id\":\"T1234\",\"email\":\"a@hotmail.com\",\"access_token\":\"abcd\"}\\]}'