【问题标题】:Invalid use of argument matchers参数匹配器的无效使用
【发布时间】:2014-06-28 15:45:54
【问题描述】:

下面的简单测试用例失败并出现异常。

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers! 3 matchers expected, 2 recorded:

不知道怎么回事

@Test
public void testGetStringTest(){

    final long testId = 1;
    String dlrBAC = null;
    NamedParameterJdbcTemplate jdbcTemplate = mock(NamedParameterJdbcTemplate.class);
    when(this.dao.getNamedParameterJdbcTemplate()).thenReturn(jdbcTemplate);
    when(jdbcTemplate.queryForObject(anyString(), any(SqlParameterSource.class), String.class
                        )).thenReturn("Test");
    dlrBAC =  dao.getStringTest(testId);
    assertNotNull(dlrBAC);

}

【问题讨论】:

    标签: java mockito


    【解决方案1】:

    Mockito 要求您在存根方法调用时仅使用原始值或仅使用匹配器。完整的例外(不是您在这里发布的)肯定可以解释一切。

    简单换行:

    when(jdbcTemplate.queryForObject(anyString(), any(SqlParameterSource.class), String.class
                            )).thenReturn("Test");
    

    when(jdbcTemplate.queryForObject(anyString(), any(SqlParameterSource.class), eq(String.class)
                            )).thenReturn("Test");
    

    它应该可以工作。

    【讨论】:

    • 添加import static org.mockito.Mockito.*;
    • 以上更改导致编译时错误,因为“类型测试类的方法 eq(Class) 未定义
    • 添加我刚才提到的静态导入
    • 希望我的理解是正确的:如果您对任何 1 个参数使用任何匹配器,那么您需要对所有其他参数以及方法使用匹配器,或者根本不使用匹配器并传递实际值/对象。
    • 非常老的帖子,但是对于最终来到这里的 Scala 程序员(比如我自己),你会发现添加 import org.mockito.Mockito._ 然后调用 eq(classOf[String]) 是行不通的。解决方案是使用eq() 函数的完整路径:org.mockito.Matchers.eq(classOf[String])),如here 所述。
    猜你喜欢
    • 2013-05-03
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 2020-09-17
    相关资源
    最近更新 更多