У меня есть единичный тест, где я издеваюсь над классом сервиса для сохранения домена. Первоначально мой метод контроллера выглядел следующим образом:Тестирование модуля Grails Pass по ссылке не работает при издевательстве
def save(Long organizationId, Convention convention) {
conventionService.save(organizationId, convention)
if (convention.hasErrors()) {
response.status = HttpStatus.UNPROCESSABLE_ENTITY.value()
respond convention.errors
} else {
response.status = HttpStatus.CREATED.value()
respond convention
}
}
Как правило, это работает, потому что Java является передача по ссылке поэтому convention
передается в метод сохранения такой же convention
объект на протяжении всего метода. Однако, когда насмехается метод conventionService.save
, передача по ссылке не работает. Настройка мой метод учета этого:
def save(Long organizationId, Convention convention) {
convention = conventionService.save(organizationId, convention)
if (convention.hasErrors()) {
response.status = HttpStatus.UNPROCESSABLE_ENTITY.value()
respond convention.errors
} else {
response.status = HttpStatus.CREATED.value()
respond convention
}
}
позволяет мой тест пройти, потому что convention
объект это то, что я ожидал от моего издеваться:
1 * service.save(1, _) >> new Convention(
id: 1,
name: 'Con 1',
description: 'This is a pretty cool convention, everyone should go',
startDate: new Date(),
endDate: new Date()+10,
organization: organization)
Мой вопрос, это ожидаемое поведение или ошибка, о которой я должен сообщить?
Thanks Jeff. Я принял столько же, но хотел быть уверенным. Я собираюсь объяснить это через пару недель. – Gregg
«Я собираюсь объяснить это через пару недель». - Вы знаете, как это сделать? –
Я так считаю. Я понимаю основную логику его в отношении насмешек в целом. Я просто хотел быть уверенным, что не было волшебства Спока или Гроуви/Грааля, которое бы управляло моими ожиданиями. – Gregg