2016-05-13 98 views
0

我正在使用Mockito進行單元測試。在Mockito有很多匹配器,如anyString(),anyBoolean()。但是假設,如果我有一個自定義enum如何在Mockito中創建自定義匹配器?

枚舉LoginType.java

//LoginType.java 
public enum LoginType { 
    FACEBOOK, 
    EMAIL, 
    GOOGLE 
} 

在我需要傳遞的LoginType實例的方法的參數之一。如何在不明確傳遞LoginType.FACEBOOKLoginType.GOOGLE的情況下傳遞參數。類似於anyString()。這個方向的任何提示都會有用。

回答

1

對於any行爲,只調用Matchers.any()在Java 8上可能已經足夠好了。那時參數類型推斷就出來了。

您也可以選擇Matchers.any(LoginType.class),它在Mockito 1.x中具有純粹的any()行爲,但會在Mockito 2.0及更高版本中提供類型檢查。無論哪種情況,傳入類文字都將幫助Java獲取推理所需的類型信息。


對於相關的問題:

  • 如果你有一個泛型類型,類常量isn`t足夠要麼;你需要指定它作爲一個明確的方法參數:

    Matchers.<YourContainer<YourType>>any(); 
    

    ...或解壓縮到一個靜態輔助方法,你需要做的,而不是一個常數或局部變量,因爲Mockito matchers work via side effects

    public static LoginType anyLoginType() { 
        return Matchers.any(); 
    } 
    
  • 最後,對於未來可能在這裏實現自定義匹配邏輯的讀者,請查找Matchers.argThatMockitoHamcrest.argThat以使Hamcrest風格的Matcher對象適應Mockito方法調用。

相關問題