【问题标题】:Mockito invalid args for namedparameterjdbctemplate命名参数jdbctemplate的Mockito无效参数
【发布时间】:2018-01-12 08:30:20
【问题描述】:
@Test
public void testGetScheduleTotalCount() {       

     when(jdbcTemplate.queryForObject(Mockito.anyString(),Mockito.anyMap(),Mockito.eq(Integer.class))).thenReturn(2);
}

在上面的测试中运行时出现以下错误:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 参数匹配器的使用无效!预计 3 个匹配器,记录 2 个:

【问题讨论】:

  • 欢迎来到 Stackoverflow。尝试添加真正的方法签名、更详细的测试用例以及可能的完整堆栈跟踪
  • 请提供来自您的 ide 或日志的错误消息。理想情况下的堆栈跟踪
  • 用实际测试和错误编辑了一个问题正文
  • 您确定有接受 Map 的 queryForObject 版本吗?你能添加你想要模拟的实际方法签名吗?
  • public Integer getScheduleTotalCount(String query, DataGridRequestDTO gridRequest) { Map namedParameters = new HashMap(); return jdbcTemplate.queryForObject(query, namedParameters, Integer.class); }

标签: unit-testing spring-boot mockito


【解决方案1】:

关于jdbcTemplate.queryForObject(query, namedParameters, Integer.class);,您的设置应该是:

Mockito.doReturn(myInteger).when(jdbcTemplateMock).queryForObject(Mockito.anyString()
       , Mockito.any(Object[].class), Mockito.eq(Integer.class)); 

关于queryForObject(sql, paramMap, new SingleColumnRowMapper<>(requiredType));,您的设置可能是:

Mockito.doReturn(myInteger)
       .when(n)
       .queryForObject(Mockito.anyString()
           , ArgumentMatchers.<Map<Integer,?>>any()
           , ArgumentMatchers.<org.springframework.jdbc.core.RowMapper<Integer>>any()); 

【讨论】:

  • 现在它给出编译错误实际命名参数接受 Map 或 SqlparameterSource
  • 没有运气仍然面临无效使用参数匹配器!预期 3 个匹配器,记录 2 个:
猜你喜欢
  • 2015-09-24
  • 2017-12-13
  • 1970-01-01
  • 2013-05-03
  • 2014-03-05
  • 2018-07-21
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
相关资源
最近更新 更多