gpt4 book ai didi

java - Hibernate + JUnit 多线程综合测试

转载 作者:行者123 更新时间:2023-12-01 04:37:56 27 4
gpt4 key购买 nike

我在 JUnit 中使用 Hibernate 和 Spring 进行集成。我使用多次读取和写入来测试我的代码是否正确处理并发。 Hibernate 的问题是我不能单独使用多线程来模拟它。 Hibernate 提示没有 Activity 的 Hibernate session 绑定(bind)到 DAO。因此,我所做的就是在线程中的 Hibernate 的 TransactionTemplate 内执行 DAO 的方法,例如

   Thread alpha = new Thread(new Runnable() {
@Override
public void run() {
TransactionTemplate tt = new TransactionTemplate(tm);
tt.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
Address address =addrDao.findBy("John Doe");
address.setZipCode("12345");
addrDao.update(address);
}
});

}
});

创建另一个线程 beta,其内容相同,但有额外的时间延迟。最后,启动两个线程,

    alpha.start();
beta.start();

它成功了。我的问题是,除了在 Spring+Hibernate+Junit 设置中使用 TransactionTemplate(...) 之外,还有其他更好的方法吗?

此外,我发现即使我在开始时包含了 @TransactionConfiguration(defaultRollback = true) ,该操作也无法在测试结束时回滚这个测试用例。

谢谢

最佳答案

true将以下内容添加到您的测试类中:

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@ContextConfiguration("classpath:application-context.xml")
@TransactionConfiguration(defaultRollback=true)

并将以下行添加到您的 application-context.xml

<tx:annotation-driven/>

您可以在测试代码中删除显式事务处理。

关于java - Hibernate + JUnit 多线程综合测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com