java – 模拟bean依赖关系的NoSuchBeanDefinitionException
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 模拟bean依赖关系的NoSuchBeanDefinitionException,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1697字,纯文字阅读大概需要3分钟。
内容图文
![java – 模拟bean依赖关系的NoSuchBeanDefinitionException](/upload/InfoBanner/zyjiaocheng/731/35839d89b4d049a8a0302090d677198b.jpg)
我试图在我的集成测试中使用模拟并且没有太多运气.我使用的是Spring 3.1.1和Mockito 1.9.0,情况如下:
@Component
public class ClassToTest {
@Resource
private Dependency dependency;
}
和
@Component
public class Dependency {
@Resource
private NestedDependency nestedDependency;
}
现在,我想使用Spring的JavaConfig对ClassToTest进行集成测试.这是我尝试过的,它不起作用:
@Test
@ContextConfiguration
public class ClassToTestIntegrationTest {
@Resource
private ClassToTest classToTest;
@Resource
private Dependency mockDependency;
@Test
public void someTest() {
verify(mockDependency).doStuff();
// other Mockito magic...
}
@Configuration
static class Config {
@Bean
public ClassToTest classToTest() {
return new ClassToTest();
}
@Bean
public Dependency dependency() {
return Mockito.mock(Dependency.class);
}
}
}
我简化了我的设置,使问题更容易理解.实际上我有更多的依赖关系,只想模拟其中的一些 – 其他是真实的,基于从我的prod @Configuration类导入的配置.
最终发生的是我得到一个NoSuchBeanDefinitionException,说明在应用程序上下文中没有类型为NestedDependency的bean.我不明白这一点 – 我认为Spring会收到Mockito嘲笑的Dependency实例,甚至不会看自动装配它.由于这不起作用,我最终不得不模拟我的整个对象图 – 这完全打败了嘲弄点!
在此先感谢您的帮助!
解决方法:
Mockito在模拟类时所做的是它使用cglib创建一个子类,它具有一些奇特的名称,如:Dependency $EnhancerByMockito(IIRC).您可能知道,子类从其父级继承字段:
@Component
public class Dependency {
@Resource
private NestedDependency nestedDependency;
}
public class Dependency$EnhancerByMockito extends Dependency{
//...
}
这意味着Spring在使用mock时仍会看到基类中的字段.你可以做什么:
>使用接口,这将导致Mockito使用动态代理而不是CGLIB生成的类
> Mock NestedDependency – 我知道它会将问题进一步级联
>禁用@Resource注释扫描以进行测试
内容总结
以上是互联网集市为您收集整理的java – 模拟bean依赖关系的NoSuchBeanDefinitionException全部内容,希望文章能够帮你解决java – 模拟bean依赖关系的NoSuchBeanDefinitionException所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。