这是我的测试方法:
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的事件!
我似乎无法让他们同时工作。
有什么想法吗?
答案 0 :(得分:0)
在测试的上下文文件中检查您的事务配置。您还可以将log4j中的日志记录级别提升至DEBUG
org.springframework
以查看事务的开始和结束时间。
答案 1 :(得分:0)
好的,我修复了问题,它与上述所有内容无关,这是由于我创建的一个模型。非常奇怪的东西。