java – JUnit用于spring测试的多个事务管理器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JUnit用于spring测试的多个事务管理器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1550字,纯文字阅读大概需要3分钟。
内容图文
![java – JUnit用于spring测试的多个事务管理器](/upload/InfoBanner/zyjiaocheng/823/5137d8185be843dda83dccd82f1016fe.jpg)
我使用的是Spring 3.0.5和Junit 4.8.2
在测试期间是否可以使用多个事务管理器?
基本上我会尝试这样的事情.我需要在测试期间从两个单独的数据库中添加和删除内容.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/applicationContext-test.xml" })
@TransactionConfiguration(transactionManager = "txMgrA", defaultRollback = true)
@TransactionConfiguration(transactionManager = "txMgrB", defaultRollback = true)
@Transactional
public class SampleTest {
...
}
解决方法:
由于Java不允许每个元素使用相同类型的多个注释,因此必须找到另一种配置方法. @TransactionConfiguration由TransactionalTestExecutionListener解释,其getTransactionManager方法仅返回单个PlatformTransactionManager.它查看@Transactional但似乎忽略了Seam 3.0中添加的值限定符.
@Transactional本身只支持单个事务管理器.如何配置真正的应用程序?你必须使用@Transactional(“< qualifier>”)(如the docs所示),对吧?
如果你只是在不同的方法上使用@Transactional和不同的tx管理器,那么最简单的解决方案是分割你的测试类.
你在嵌套交易吗?也就是说,你在一个方法上有@Transactional(“tm1”),它调用一个具有@Transactional(“tm2”)的嵌套方法?听起来有点不寻常.您可以尝试以相同的方式设置测试 – 有两个测试@Services,每个都有相应的@Transactional注释,像往常一样用tx:advice代理.外部服务设置外部txn;内部服务设置内部txn并包含实际的测试代码.你不能使用@Rollback,但嘿,黑客并不漂亮.
另一个选择是创建自己的PlatformTransactionManager,委托给另外两个管理器(仅用于测试目的).
也许更好的方法是放弃并手动管理测试的@ Before / @ After方法中的两个事务.
最好是使用JTA全局事务.希望你实际上并没有嵌套单独的交易,这一切都没有实际意义;)
内容总结
以上是互联网集市为您收集整理的java – JUnit用于spring测试的多个事务管理器全部内容,希望文章能够帮你解决java – JUnit用于spring测试的多个事务管理器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。