java – 如何在模拟依赖项时测试事务回滚是否有效?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何在模拟依赖项时测试事务回滚是否有效?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1876字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何在模拟依赖项时测试事务回滚是否有效?](/upload/InfoBanner/zyjiaocheng/776/d91ced7ad69e47eeae53f9a7051a19a2.jpg)
假设我有这个:
@Transactional(rollbackFor = NotificationException.class)
public interface PersonManagerService {
public void addPerson(Person person);
}
和实施:
public class PersonManagerServiceImpl implements PersonManagerService {
public OtherService otherService;
public void addPerson(Person person) {
// stuff
}
// getter and setter for otherService
}
如果仍然使用addPerson方法命中数据库,我将如何模拟otherService依赖项?
我的方案是,我想测试一个特定的异常导致回滚正在添加的人的保存.这个异常来自OtherService类,我不想调用它的真实版本.我目前正在使用Spring Transaction注释,所以我有这样的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {various locations})
public class Test() {
@Autowired
PersonManagerService service;
@Test
public void test() {
// how to call setOtherService so it can be a mock?
}
如果我尝试转换自动连线bean,我会得到一个IllegalArgumentException,因为它是一个代理.如果我让Impl不使用接口,我可以使用CGLIB,但我不想这样做.如果我以编程方式创建impl,那么它就不会绑定到事务流中.我还有其他选择吗?
解决方法:
您可以通过多种方式解决此计划(从最佳到最差):
>利用@Profiles – 在Spring 3.1中,您可以将profile名称与每个bean相关联.当您启动应用程序上下文时,您将提供活动配置文件,并且只会实例化没有任何关联的配置文件或提供的配置文件匹配的bean.这是一个非常强大的机制.
@Profile("prd")
public class PersonManagerServiceImpl implements PersonManagerService
//...
@Profile("test")
public class PersonManagerServiceMock implements PersonManagerService
//...
@ContextConfiguration
@ActiveProfiles(value = "test")
public class Test {
>使用primary或??@Primary – 如果要在PersonManagerServiceImpl中自动装配otherService,则可以使用primary =“true”属性或@Primary注释定义第二个模拟bean.当自动装配时,Spring会更喜欢初级豆.
>解包事务代理(请参阅:Is it possible to unproxy a Spring bean?和Mocking a property of a CGLIB proxied service not working)以访问setter.有点hacky,但适合其他人
内容总结
以上是互联网集市为您收集整理的java – 如何在模拟依赖项时测试事务回滚是否有效?全部内容,希望文章能够帮你解决java – 如何在模拟依赖项时测试事务回滚是否有效?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。