如何模拟jdbctemplate.query()方法?

时间:2018-09-11 12:36:10

标签: spring spring-boot

Mokito.when(jdbcTemplate.query(sql, new ParticipantMapper())).thenReturn(participantExistingList); 

我正在使用上述代码行来模拟jdbcTemplate,但无法正常工作。有人可以帮忙模拟jdbcTemplate吗?

3 个答案:

答案 0 :(得分:1)

尝试这样做:

在测试课上使用:

    @Mock
    JdbcTemplate jdbcTemplate; 

然后尝试:

Mokito.when(jdbcTemplate.query(sql, new ParticipantMapper())).thenReturn(participantExistingList); 

如果仍然失败,请尝试:

doReturn(participantExistingList).when(jdbcTemplate).query(sql, new ParticipantMapper());

希望这会有所帮助

答案 1 :(得分:1)

请务必在query()方法中查看参数的顺序。

就我而言,我想模拟以下行:

List<String> someList = jdbcTemplate.query(SQL_STRING,new Object[] { Id }, new MyCustomMapper());

所以我用以下方式来模拟它,注意传递的参数顺序

when(jdbcTemplate.query(any(String.class),(Object[]) anyVararg(),any(MyCustomMapper.class))).thenReturn(myList);

答案 2 :(得分:0)

尝试对所有参数使用ArgumentMatchers,如下所示:

Mokito.when(jdbcTemplate.query(any(String.class), any(ParticipantMapper.class)).thenReturn(participantExistingList);

根据您希望专注于互动的方式,您可以使用例如eq()为您的sql字符串。有关JavaDoc,请参见here