代码之家  ›  专栏  ›  技术社区  ›  Ori Marko

mockito验证方法称为忽略参数

  •  1
  • Ori Marko  · 技术社区  · 6 年前

    我有一个dao方法,我想验证它是否在服务内部调用

    send(User user, Properties prop)
    

    我可以在服务中使用受保护的方法进行验证,但我认为它应该是私有的

    verify(dao).send(user, service.getProp())
    

    我试着用不同的方式定义接受任何属性为:

    verify(dao).send(user, any(Properties.class)); // or any()
    
    verify(dao).send(user, Matchers.isA(Properties.class)));
    

    但都失败了,参数无效

    FAILED: testService
    org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
    Invalid use of argument matchers!
    2 matchers expected, 1 recorded:
    -> at com.package.TestService.testService(TestService.java:330)
    
    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.
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Amit    6 年前

    正如异常详细信息所解释的,不允许混合原始值( user )用火柴( any(...) )

    相反,对所有参数使用matchers eq(...) 匹配器:

    verify(dao).send(eq(user), any());