2016-01-05 94 views
0

我試圖模擬一個方法的返回值,但是我得到了NotAMockExceptionInjectMocks對象上的org.mockito.exceptions.misusing.NotAMockException

@InjectMocks 
private MyService myService; 
@Mock 
private OtherServiceUsedInMyServiceAsAutowired otherServiceUsedInMyServiceAsAutowired; 

裏面MyService我有一個名爲myMethod()方法,我想回到虛擬對象時,此方法被調用。

doReturn(someDummyObject).when(myService).myMethod(any(), any(), any()); 

並在那一點上,我得到的錯誤。我究竟做錯了什麼?完整的錯誤:

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to when() is not a mock! 
Example of correct stubbing: 
    doThrow(new RuntimeException()).when(mock).someMethod(); 
+0

是實際創建一個模擬的@InjectMocks註釋嗎? –

回答

2

註釋@InjectMocks用來注入嘲笑爲測試對象:

@InjectMocks - injects mocks into tested object automatically.

這並不意味着該對象將是一個模擬本身。如果您想測試一個對象並且希望該對象自動(通過setter注入)預先初始化模擬實例,則此註釋非常有用。

如果你想創建的MyService一個模擬,使用@Mock

@Mock 
private MyService myService; 

這將創建一個MyService模擬,你將需要指定要用於該模擬的行爲。第一件事是OtherServiceUsedInMyServiceAsAutowired沒有意義了:嘲笑的對象不會依賴於那個類。

+0

如果我使用@Mock for MyService,那麼是否也會自動調用嘲笑的OtherServiceUsedInMyServiceAsAutowired? –

+0

@AntonBelev我認爲你誤解了模擬是什麼。模擬內部沒有自動裝配。你可以通過調用'do ...'方法或'when'來控制模擬。 – Tunaki

+0

謝謝,我使用InjectMocks的原因是因爲我在MyService中有一個Autowired字段,我希望這個字段用模擬對象進行初始化,因此模擬。但是我不知道InjectMocks不會創建一個模擬。 –