向春豆中注入Mockito模拟

向春豆中注入Mockito模拟

为了使用JUnit进行单元测试,我想将一个Mockito模拟对象注入到Spring(3+)bean中。当前,通过使用@Autowired私有成员字段上的注释。

我考虑过用ReflectionTestUtils.setField但是,我希望注入的bean实例实际上是一个代理,因此不声明目标类的私有成员字段。我不希望为依赖项创建一个公共设置程序,因为那时我将纯粹为了测试目的而修改我的接口。

我跟踪了一些建议由Spring社区提供,但是模拟没有被创建,自动连接失败:

<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.package.Dao" /></bean>

我目前遇到的错误如下:

...Caused by: org...NoSuchBeanDefinitionException:
    No matching bean of type [com.package.Dao] found for dependency:
    expected at least 1 bean which qualifies as autowire candidate for this dependency.
    Dependency annotations: {
        @org...Autowired(required=true),
        @org...Qualifier(value=dao)
    }at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)at org...DefaultListableBeanFactory.
    doResolveDependency(D...y.java:770)

如果我设置constructor-arg值为无效的值,在启动应用程序上下文时不会发生错误。


PIPIONE
浏览 561回答 3
3回答

尚方宝剑之说

我有一个非常简单的解决方案,使用SpringJavaConfig和Mockito:@Configurationpublic&nbsp;class&nbsp;TestConfig&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Mock&nbsp;BeanA&nbsp;beanA; &nbsp;&nbsp;&nbsp;&nbsp;@Mock&nbsp;BeanB&nbsp;beanB; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TestConfig()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MockitoAnnotations.initMocks(this);&nbsp;//This&nbsp;is&nbsp;a&nbsp;key &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//You&nbsp;basically&nbsp;generate&nbsp;getters&nbsp;and&nbsp;add&nbsp;@Bean&nbsp;annotation&nbsp;everywhere &nbsp;&nbsp;&nbsp;&nbsp;@Bean &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BeanA&nbsp;getBeanA()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;beanA; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Bean &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;BeanB&nbsp;getBeanB()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;beanB; &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP