使用MockIto模拟声明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用MockIto模拟声明相关的知识,希望对你有一定的参考价值。
我想为服务方法编写一个测试方法。在这个服务方法中,我们调用一个从数据库中获取数据的查询,并在函数中使用该值来进行一些处理。我想只存根这个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语句。
请帮帮我怎么去发表声明。
提前致谢。
答案
@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对象并在存根时返回该值(如下所示)
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()这样的匹配器而不是使用某些文本。
希望它有用。
以上是关于使用MockIto模拟声明的主要内容,如果未能解决你的问题,请参考以下文章