2012-06-20 60 views
34

錯誤細節:當我運行的Mockito測試時WrongTypeOfReturnValue異常

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by updateItemAttributesByJuId() 
updateItemAttributesByJuId() should return ResultRich 
This exception might occur in wrongly written multi-threaded tests. 
Please refer to Mockito FAQ on limitations of concurrency testing. 

我的代碼:

@InjectMocks 
protected ItemArrangeManager arrangeManagerSpy = spy(new ItemArrangeManagerImpl()); 
@Mock 
protected JuItemWriteService juItemWriteService; 

when(arrangeManagerSpy 
    .updateItemAttributes(mapCaptor.capture(), eq(juId), eq(itemTO.getSellerId()))) 
    .thenReturn(false); 

正如你所看到的,我呼籲updateItemAttributeswhen(它返回一個boolean)不在updateItemAttributesByJuId

  1. 爲什麼Mockito試圖從updateItemAttributesByJuId返回boolean
  2. 這怎麼解決?

回答

20

另一個原因,類似的錯誤消息試圖嘲弄一個final方法。人們不應該試圖模擬最終的方法(參見Final method mocking)。

我也在多線程測試中遇到了錯誤。通過gna的工作在這種情況下。

+0

解決了我的問題[+1] –

1

如果您使用註釋,可能需要使用@Mock而不是@InjectMocks。因爲@InjectMocks一起工作@Spy和@Mock。 @Spy會跟蹤最近執行的方法,並且您可能會覺得不正確的數據會被返回/刪除。

+1

「'@InjectMocks'一起工作爲'@ Spy'和'@ Mock'。」 < - 這對我來說似乎是錯誤的。你從哪裏聽到這個消息? –

2

我最近有這個問題。問題是我試圖模擬的方法沒有訪問修飾符。加入公衆解決了這個問題。

2

在我的情況下,問題是由於試圖嘲諷一種靜態方法而忘記在課堂上呼叫mockStatic而引起的。此外,我忘了,包括類到@PrepareForTest()

0

我有這個錯誤,因爲在我的測試中,我有兩個預期,一個在模擬和一個對具體類型

MyClass cls = new MyClass(); 
MyClass cls2 = Mockito.mock(Myclass.class); 
when(foo.bar(cls)).thenReturn(); 
when(foo.baz(cls2)).thenReturn(); 

我改變CLS來固定它也是一個模擬

相關問題