在junit中的@Transactional注释 - spring和jms

时间:2014-02-02 14:15:50

标签: java spring junit jms

这是我的测试方法:

public TestClass extends AbstractTransactionalJUnit4SpringContextTests {

   @Autowired
   private UserService userService;

   @Test
   public myTest() {

       this.userService.doStuff();

       Thread.sleep(ENOUGH_TIME_FOR_JMS_MESSAGES_TO_BE_CONSUMED);

       assert(stuff happend by consumers);

   }

UserService:

@Service
public UserService {

   @Transactional
   public void doStuff() {
     entity.getLazyField().doSomething();
     jmsTemplate.produce(SOME_MESSAGE_FOR_MANY_CONSUMERS);
   }
}

听取制作活动的消费者:

public SomeConsumer{

   @Transactional
   public void onMessage(Message someMessage) {
     saveSomeEntity();
     updateSomeOtherStuffOnDB();
   }
}

所以,问题是当我运行上面的测试时,我得到一个懒惰的初始化异常。 出于某种原因,即使有@Transactional注释,我也不会在测试中进行交易。

所以我试图将测试签名更改为:

@Test
@Transactional
public myTest() {..}

这样懒惰的错误就消失了,但只有当WHOLE测试完成时才会触发jms的事件!

我似乎无法让他们同时工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在测试的上下文文件中检查您的事务配置。您还可以将log4j中的日志记录级别提升至DEBUG org.springframework以查看事务的开始和结束时间。

答案 1 :(得分:0)

好的,我修复了问题,它与上述所有内容无关,这是由于我创建的一个模型。非常奇怪的东西。