我想为一个服务方法写一个测试方法。在这个服务方法中,我们调用一个查询,从数据库中获取数据,并在函数中使用该值进行一些处理。我想只打这个电话。这是我的函数
public arraylist retrieveSomthing(JdbcTemplate){
//some processing is happening
List<Map<String,Object>> result = JdbcTemplate.queryForList("QueryName");
//some processing is happening for the result return from the query.
}
我想为上面的函数编写测试,但是我只想存根Jdbc。queryforList声明。
请告诉我如何去存根的声明。
@Test
public void testRetrieveSomthing() {
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
List < .. > results = ///something you would do dummy return
when(jdbcTemplate.queryForList(anyString())).thenReturn(results);
List < .. > alist = instance.retrieveSomthing(jdbcTemplate);
assertEquals(alist, expectedList);
}
这很容易做到
1)模拟jdbctemplate对象,如下所示:
@Mock private JdbcTemplate jdbcTemplate;
2)由于jdbcTemplate.queryForList("QueryName")返回列表,请确保您已经创建了一个列表对象并在存根时返回该值(如下所示)
List<Example> result = new ArrayList();
result.add("dummy values");
result.add("dummy values");
然后 //import static org.mockito.Matchers.anyString;
Mockito.when(jdbcTemplate.queryForList(anyString()).thenReturn(result);
PS:在嘲讽和存根时要记住的要点是,
1)在处理List对象时创建新对象并返回实际测试类
的根值2)使用像anyString()这样的匹配器,而不是使用一些文本。
希望对大家有用