2016-02-16 44 views
2

使用我的Mockito麻煩了下列要求:和的Mockito Mockito.any(Map.class)

Mockito.when(restOperationMock.exchange(
     Mockito.anyString(),  
     Mockito.any(HttpMethod.class), 
     Mockito.any(HttpEntity.class), 
     Mockito.eq(CustomerResponse.class), 
     **Mockito.anyMap()**)). 
    thenReturn(re); 

問題是wasnt攔截,因爲我是用Mockito.any(Map.class)的方法,而不是Mockito.anyMap()和我傳遞的參數是一個HashMap。 Mockito.any(Map.class)和Mockito.anyMap()之間有什麼區別?

回答

4

只有兩個any(Map.class)anyMap()之間的微小差異:

  • 作爲一個「虛擬價值」的迴歸,的Mockito可以返回調用anyMap()一個空的地圖,但只能換來呼叫nullany(Map.class)。如果restOperationMock.exchange在存根期間委託給一個實際的實現,比如它是間諜或unmockable方法(最終方法,最後一個類的方法等),那麼該虛擬值可以用於真實代碼,並且any(Map.class)會導致NullPointerException anyMap()沒有。在大多數情況下,這並不重要。

  • 從Mockito 2.0開始,Mockito會將any(Map.class)調用爲isA(Map.class),而不是完全忽略參數。 (請參閱Mockito撰稿人Brice對this SO answer的評論。)由於restOperationMock.exchange takes an Object vararg,您可能需要anyMap來捕獲傳遞非Map對象或未傳遞任何對象的情況。