Использование Спока для проверки сложного условия строки JSON никогда не удовлетворяется


org.spockframework:spock-core:0.7-groovy-2.0
Gradle 1.12
Groovy 1.8.6

Привет,

У меня есть функция, которая возвращает строку JSON. И я хочу проверить, что моя функция правильно создает формат JSON. Однако у меня есть проблема с некоторыми escape-символами, так как тест всегда проваливается.

Это правильный формат JSON, который я ожидаю и тестирую против:

{"function":"verifyEmail","parameters":[{"email_pwd":"password","session_id":"S1234","snapz_id":"T1234","email":"a@hotmail.com","access_token":"abcd"}]}
Тем не менее, установка условия оказывается трудной из-за символов double quotes и [ ]. Я пытался убежать от них.

Это и есть функция:

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]
1 2

1 ответ:

В этой строке:

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

Вы сравниваете String с Map. Вам нужно разобрать строку JSON справа (используя JsonSlurper) и сравнить значения. Также нет необходимости в esacpe " , Когда используется одинарная кавычка '.

Вы также можете сериализовать левую сторону (snapzJSON.createJSONRequest() в строку с помощью JsonOutput), а затем сравнить.

Гораздо лучше сравнивать карты.