Gostaria de injetar um objeto simulado do Mockito em um bean Spring (3+) para fins de teste de unidade com o JUnit. Atualmente, minhas dependências de bean são injetadas usando a @Autowired
anotação em campos de membros privados.
Eu considerei usar, ReflectionTestUtils.setField
mas a instância do bean que desejo injetar é na verdade um proxy e, portanto, não declara os campos de membros privados da classe de destino. Não desejo criar um setter público para a dependência, pois modificarei minha interface apenas para fins de teste.
Segui alguns conselhos da comunidade Spring, mas o mock não foi criado e a fiação automática falha:
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.package.Dao" />
</bean>
O erro que encontro atualmente é o seguinte:
...
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)
Se eu definir o constructor-arg
valor como algo inválido, nenhum erro ocorrerá ao iniciar o contexto do aplicativo.