我想为服务方法编写测试方法。在这个服务方法中,我们调用一个从数据库中获取数据的查询,并在函数中使用该值来进行一些处理。我想只存根这个db调用。这是我的功能
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语句。
请帮帮我怎么去发表声明。
先谢谢。
答案 0 :(得分:0)
@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 :(得分:0)
很容易做到
1)如下所示模拟jdbctemplate对象:
@Mock private JdbcTemplate jdbcTemplate;
2)由于jdbcTemplate.queryForList(“QueryName”)返回列表,因此请确保已创建List对象并在存根时返回该值(如下所示)
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对象时创建新对象并返回实际测试类的on-stubbing值
2)使用像anyString()这样的匹配器而不是使用某些文本。
希望它有用。