2016-03-01 54 views
2

我想模擬一個方法,它需要一個地圖和其他參數作爲參數。我的目標是匹配地圖條目。 本來我定義我的嘲笑爲:使用Mockito的arg該匹配器導致「方法模糊的類型」錯誤

when(discoveryJobCatalogResourceAccessor.findResource(argThat(allOf(hasEntry("start", "testStart"), hasEntry("level", "testLevel"))), any(Integer.class), 
      any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse); 

這會導致以下錯誤:

"The method findResource(Map<String,String>, Integer, Integer, String, String) is ambiguous for the type DiscoveryJobCatalogResourceAccessor" 

當我與any(HashMap.class)取代argThat這樣的:

when(discoveryJobCatalogResourceAccessor.findResource(any(HashMap.class), any(Integer.class), 
      any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse); 

錯誤了,但在這種情況下,我無法匹配地圖值。似乎Mockito的argThat造成歧義。我想知道是否有辦法使用argThat而不會導致錯誤?

回答

4

您可以強制轉換爲所需類型

when(discoveryJobCatalogResourceAccessor.findResource(HashMap<String,String>)argThat(allOf(hasEntry("start", "testStart"), hasEntry("level", "testLevel"))), any(Integer.class), 
      any(Integer.class), any(String.class), any(String.class))).thenReturn(searchResponse); 
+1

就是這樣。問題解決了。感謝yoy – MrkK

+1

@MrkK不要忘記將其標記爲已接受。如果你是新來的,不知道如何接受答案,請閱讀http://stackoverflow.com/tour –

相關問題