對於我的單元測試,我想使用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