У меня есть тест Спока, подобный следующему:
class SomeSpec extends Specification {
Map message
String topicArn = "aws::fake-sns-topic"
def 'test new message'() {
when: 'A new message is received'
message = [
"ownerToken": null,
"status": "NEW"
]
def response = api.doHandleRequest(message)
then: 'It is handled'
1 * snsClient.publish(topicArn, JsonOutput.toJson([
"ownerToken": null,
"status": "NEW"
]))
}
}
Это отлично работает, но я бы предпочел изменить утверждение на
1 * snsClient.publish(topicArn, message)
, чтобы уменьшить дублирование литерала карты. Когда я получаю следующую ошибку:
Too few invocations for:
1 * snsClient.publish(topicArn, JsonOutput.toJson(message)) (0 invocations)
Unmatched invocations (ordered by similarity):
1 * snsClient.publish('aws::fake-sns-topic', '{"ownerToken":null","status":"NEW"}')
One or more arguments(s) didn't match:
0: <matches>
1: argument == expected
| | |
| | null
| false
{"ownerToken":null,"status":"NEW"}
Почему второй аргумент становится пустым, когда я использую переменную сообщения вместо литерала карты? Первый аргумент является переменной, а не литералом, и он проходит через штраф.