2012-10-11 41 views
0

我有這個類叫restTemplate。它是Spring框架的RestTemplate對象。我想它在我測試的Mockito的設置方法的開頭復位,但我得到異常:
爲什麼Mockito認爲這個autowired bean是空的?

org.mockito.exceptions.misusing.NotAMockException: Argument should be a mock, but is null! 


那我做錯了嗎?我有

<context:component-scan base-package = "..."/> 

中列出了正確的軟件包它自動連接到我的測試類,並在我的applicationContext-的test.xml文件中列出。我應該首先看什麼?
編輯:

<bean id="restTemplate" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="org.springframework.web.client.RestTemplate" /> 
</bean> 
+0

你如何定義你的XML的'RestTemplate'模擬?也可能由Spring代理。 –

+0

它在編輯中。感謝您的迴應。 – user1281598

+0

能否打印'restTemplate.toString()'之前'復位()'?還請嘗試將'RestTemplate'替換爲'RestOperations'?最後,你可以嘗試從這裏治療與'unwrapProxy()'方法你注入模擬:正在重置前http://stackoverflow.com/questions/8121551? –

回答

3

%的API:Mockito.mock需要的Class<?>實例,但在你的Spring配置你傳遞一個String這是一個類的完全合格的名稱,但它不是一個Class<?>實例。

這引出了一個問題,你爲什麼要建立在你的Spring配置嘲弄?爲什麼不在你的測試中實例化待測類並在那裏創建模擬。嘲笑是設計你的單元測試。如果您正在加載上下文,則可能正在進行集成測試。不是說在JUnit測試中加載上下文是件壞事,但在他們中使用Mocks似乎是在混合事物。然而,如果你真的想嘗試一下,你可以嘗試使用Class.forName作爲工廠方法來聲明一個類實例的bean。喜歡的東西:

<bean id="classInstance" class="java.lang.Class" factory-method="forName"> 
    <constructor-arg value="org.springframework.web.client.RestTemplate" /> 
</bean> 


<bean id="restTemplate" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg ref="classInstance" /> 
</bean> 
相關問題