2016-05-13 96 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方法调用。

相关问题