2017-03-19 113 views
0

我不知道是什麼原因造成此問題,但會引發InvalidUseOfMatchersException。InvalidUseOfMatchersException:未使用任何原始值

This exception may occur if matchers are combined with raw values: 
//incorrect: 
someMethod(anyObject(), "raw String"); 
When using matchers, all arguments have to be provided by matchers. 
For example: 
//correct: 
someMethod(anyObject(), eq("String by matcher")); 

For more info see javadoc for Matchers class. 

導致異常的代碼如下。

when(EventHandlingForFileUpload.onUploadEvent(any(CustomBatchFile.class))).thenReturn(SomeCustomEvents); 
+0

奇怪。也許你可以添加你打算在那裏測試的onUploadEvent()方法的簽名。以及從生產代碼實際調用該方法的行。 – GhostCat

回答

0

如果EventHandlingForFileUpload.onUploadEvent是一個靜態方法,那麼你就需要use PowerMock或重構你的代碼; Mockito只適用於非finalfinal類和接口(不包括Mockito 2.1's opt-in final-mocking magic)上的非實例方法。

+0

感謝您的評論,該方法不是靜態的,它不是最終的,也不是最終的類。 – user3822332

+0

@ user3822332啊!請注意,您的命名('EventHandlingForFileUpload')對於Java實例而言並不常見。我建議發佈'onUploadEvent'的代碼以及圍繞異常行的代碼 - 尤其是它之前的代碼行。 Mockito匹配者是有狀態的,所以它可能是欺騙性的,哪一行實際上是Mockito的濫用。 –

+0

謝謝你的幫助,但恐怕我不能再發布它,因爲它是專有的。 :( – user3822332

0

我也沒有使用任何原始值,但得到「InvalidUseOfMatchersException」

我有這樣的事情

when(service.getResolver(eq(document.getId()), anyString())).thenReturn(aResolver); 

並且它拋出異常。 「文件」 是一個模擬

後,我把它改成...

when(service.getResolver(eq(docId), anyString())).thenReturn(aResolver); 

...它的工作(即我搬出方法調用的getId())