Grails: транзакции в интеграционных тестах

У меня очень простая установка — контроллер, который вызывает метод для услуга. В этом сервисе я сохраняю объект в БД, а также отправляю сообщение JMS в очередь — после его сохранения — с помощью введенного JMSTemplate. В сервисе транзакции включены по умолчанию.

При тестировании этого вручную — с отключенным сервером ActiveMQ — выдается исключение, и транзакция откатывается — с чистым эффектом, что объект также не сохраняется в БД. Все хорошо.

Однако, когда я запускаю это с помощью интеграционного теста (с ActiveMQ, который все еще не работает), утверждение, которое у меня есть, чтобы проверить, что объект не был сохранен в БД, используя запрос подсчета после того, как я вызываю контроллер, не сообщает, что счетчик равен 1. Я подтвердил, что в БД нет ни одного из этих объектов, когда тест начинается, добавив еще одно утверждение в начале теста, чтобы гарантировать, что счетчик равен 0.

Является ли это ожидаемым поведением (возможно, из-за характера транзакций в среде интеграционного тестирования) или я потенциально делаю что-то не так? Исключение по-прежнему выдается, потому что сервер JMS не работает, и это исключение RuntimeException.

Интеграционные тесты и транзакции Grailsсоздают впечатление, что этого и следовало ожидать. В таком случае есть ли какие-либо рекомендации относительно передового опыта тестирования поведения транзакций в интеграционных тестах?

5
задан Community 23 May 2017 в 11:52
поделиться