对于我的单元测试,我想使用mock来测试某个bean的自动装载依赖项。创建模拟和注入的单元测试类正常,但将其注入豆测试失败,将模拟注入bean失败
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type [Service] found for
dependency: expected at least 1 bean which qualifies as autowire candidate for this
dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
这是我用来testContext.xml
<bean id="Service" class="org.easymock.EasyMock" factory-method="createMock">
<constructor-arg value="Service" ></constructor-arg>
</bean>
<bean id="Controller" class="Controller">
<property name="Service" ref="Service"></property>
</bean>
这其中的一部分豆测试(Controller.java)在布线就失败
@Autowired
private Service service;
但如果我自动装配相同的模拟到我的单元测试类(ControllerTest.java),没有出现错误,
@Autowired
private Service service;
注入的对象类型的
($Proxy18) EasyMock for interface Service
任何建议,为什么注入豆测试是不可能的,但注入到测试工作?
亲切的问候 多米尼克
感谢您的提示!我不认为在春天使用mock是不寻常的。在单元和集成测试中嘲笑应用程序的某些层的原因很多。但是你是对的,我们应该注意我们是否需要单元测试或集成测试。 – Dominik
我不认为在Spring应用程序中使用mocks是不寻常的。我只是认为实际使用Spring进行模拟注入是很不寻常的,因为Spring通常也会处理bean实例化,这正是嘲弄的核心。但是我从我的回答中放弃了这个评论,坦率地说,仅仅因为我没有看到它,我怎么知道这是不寻常的?这样做似乎很难。 – jhericks
即使非常感谢您的建议。那一天我经常谈论这件事,为什么它会出现异常。最终,我从所有Spring上下文链接中解除了单元测试的负担。现在它甚至不是从AbstractJUnit4SpringContextTests派生出来的......它很漂亮,透明性和可理解性进入了测试架构:控制器是用它自己的构造函数创建的,并且-mocked-dependencies是通过ReflectionTestUtil设置的(由于缺少@Autowired字段的setter)......并且那很好,谢谢! – Dominik