2012-10-12 74 views
0

我已經在測試類doNothing()不與春嘲笑@Autowired領域

@Autowired 
private AbcDAO abcDAO; 

自動裝配一個領域工作,並用它這樣

doThrow(new RuntimeException()).when(abcDAO).methodName(xyz); 

doNothing().when(abcDAO).methodName(xyz); 

我在這樣的春季文件中嘲笑了這個DAO課程

<bean id="abcDAO" class="org.mockito.Mockito" factory-method="mock" > 
     <constructor-arg value="a.b.c.abcDAO" /> 
    </bean> 

我得到NotAMockException Argument passed to when() is not a mock.

當我在測試類中使用`@Mock註解這樣

@Mock 
    private AbcDAO abcDAO; 

直接(而非@Autowiring,並在春季嘲諷),它工作正常。

爲什麼發生?

編輯:

好吧,讓我告訴你這樣做的原因。

我們有一個服務X,我想爲'X'的API編寫junits。 Junit的編寫方式是我創建一個客戶端並調用這些API。我不直接調用可以使用@Mock和@Inject mocks的方法。

我不確定是否清楚,但這是在需要在春天文件中嘲笑的用例。

回答

2

看到這個答案:why-does-mockito-think-this-autowired-bean-is-null

Mockito.mock不採取StringClass<?>。正如其他問題所述。是否真的有一個很好的理由嘗試在Spring環境中創建模擬?

+0

如果你真的有一個很好的理由,爲什麼不使用[springockito](https://bitbucket.org/kubek2k/springockito/wiki/Home)? – Alban

+0

我嘗試了在那裏建議的方法。 <豆ID = 「ClassInstance的」 類= 「java.lang.Class中」 工廠方法= 「的forName」> \t \t <構造精氨酸值= 「ababcDAO」/> \t \t \t <豆ID = 「abcDAO」 類= 「org.mockito.Mockito」 工廠方法= 「模擬」> \t \t <構造精氨酸REF = 「ClassInstance的」/> \t 但是我再次得到同樣的錯誤。 – instanceOfObject

+0

再一次,它沒有建議嘗試這樣做。我會認爲這是一種反模式。否則,請嘗試Alban對spingockito的建議。 –