У меня очень простая установка — контроллер, который вызывает метод для услуга. В этом сервисе я сохраняю объект в БД, а также отправляю сообщение JMS в очередь — после его сохранения — с помощью введенного JMSTemplate. В сервисе транзакции включены по умолчанию.
При тестировании этого вручную — с отключенным сервером ActiveMQ — выдается исключение, и транзакция откатывается — с чистым эффектом, что объект также не сохраняется в БД. Все хорошо.
Однако, когда я запускаю это с помощью интеграционного теста (с ActiveMQ, который все еще не работает), утверждение, которое у меня есть, чтобы проверить, что объект не был сохранен в БД, используя запрос подсчета после того, как я вызываю контроллер, не сообщает, что счетчик равен 1. Я подтвердил, что в БД нет ни одного из этих объектов, когда тест начинается, добавив еще одно утверждение в начале теста, чтобы гарантировать, что счетчик равен 0.
Является ли это ожидаемым поведением (возможно, из-за характера транзакций в среде интеграционного тестирования) или я потенциально делаю что-то не так? Исключение по-прежнему выдается, потому что сервер JMS не работает, и это исключение RuntimeException.
Интеграционные тесты и транзакции Grailsсоздают впечатление, что этого и следовало ожидать. В таком случае есть ли какие-либо рекомендации относительно передового опыта тестирования поведения транзакций в интеграционных тестах?