JUnit и jms — запущенные события не используются в середине теста

Мы используем spring с junit, jms (activemq) и mySql.

Мы хотели бы создать несколько тестов junit, которые после их выполнения будут откатываться.

Для этого мы используем аннотацию @Transactional для каждого теста.

Проблема в том, что один из наших тестов вызывает службу, которая отправляет сообщение jms (в середине теста), дело в том, что событие используется только после завершения тестов (возможно, конец транзакции?), поэтому утверждение в конец теста не проходит.

какие-либо идеи, почему событие не используется сразу (ps мы пытались использовать сон, чтобы событие могло быть использовано, это не работает)


person Urbanleg    schedule 21.01.2014    source источник


Ответы (2)


Во-первых, это не модульный тест... это нормально... Есть 2 причины, по которым сообщение не потребляется:

  1. Транзакция, в которой отправляется сообщение, не зафиксирована. Благодаря этому блокировка сообщения на стороне сервера не снимается.
  2. Существует проблема со временем, и тест заканчивается слишком рано и не ждет обратного вызова.
person Neeraj Krishna    schedule 21.01.2014

В этом весь смысл сделок. Сообщение недоступно для потребления до тех пор, пока транзакция не будет зафиксирована (иначе как вы могли бы откатить его, если кто-то его уже видел?). Вы можете выполнить отправку в новой транзакции (Propagation.REQUIRES_NEW), если вы не хотите, чтобы отправка была частью охватывающей транзакции.

person Gary Russell    schedule 21.01.2014