Использование Спока для проверки сложного условия строки 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 ответ:
В этой строке:
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
), а затем сравнить.Гораздо лучше сравнивать карты.