I'd like to continue this question.
These answers foo and bar are exactly what I would need.
But for the bar example spring doesn't infer the type of bean that is returned from generic mock() method. But actually it's exactly the same as in the MockFactoryBean case, that is working.
class MockFactoryBean<T> implements FactoryBean<T> {
private Class<T> type;
public void setType(final Class<T> type) {
this.type = type;
}
@Override
public T getObject() throws Exception {
return (T) Mockito.mock(type);
}
@Override
public Class<T> getObjectType() {
return type;
}
@Override
public boolean isSingleton() {
return true;
}
}
plus
<bean id="mockFactory" name="someType" class="com.example.MocksFactory" >
<property name="type" value="com.example.SomeType" />
</bean>
BUT using org.mockito.Mockito
and mock()
factory method doesn't work
<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="com.example.SomeType" />
</bean>
and one gets No matching bean of type [ com.example.SomeType ] ... when Autowiring.
@Autowired public SomeType someType;
Why is that ?
the way with MockFactoryBean is quite inconvenient because if you have to mock many beans, you end up like this :
<bean id="mockFactory1" name="metadataExtractor" class="tests.base.MocksFactory" >
<property name="type" value="processing.MetadataExtractor" />
</bean>
<bean id="mockFactory2" name="fileValidator" class="tests.base.MocksFactory" >
<property name="type" value="validation.file.FileValidator" />
</bean>
<bean id="mockFactory3" name="documentMatcher" class="tests.base.MocksFactory" >
<property name="type" value="validation.matching.DocumentMatcher" />
</bean>
<bean id="mockFactory4" name="uploadMatcher" class="tests.base.MocksFactory">
<property name="type" value="validation.matching.UploadMatcher" />
</bean>
<bean id="mockFactory5" name="tempFileLocalService" class="tests.base.MocksFactory">
<property name="type" value="service.TempFileLocalService" />
</bean>
<bean id="mockFactory6" name="orderLocalService" class="tests.base.MocksFactory">
<property name="type" value="service.OrderLocalService" />
</bean>
<bean id="mockFactory7" name="counterLocalService" class="tests.base.MocksFactory">
<property name="type" value="service.CounterLocalService" />
</bean>
Because without id & name it doesn't infer the type.