使用MockIto模拟声明

时间:2016-10-07 08:38:39

标签: junit mockito junit4

我想为服务方法编写测试方法。在这个服务方法中,我们调用一个从数据库中获取数据的查询,并在函数中使用该值来进行一些处理。我想只存根这个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语句。

请帮帮我怎么去发表声明。

先谢谢。

2 个答案:

答案 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()这样的匹配器而不是使用某些文本。

希望它有用。