使用MockIto模拟语句



我想为一个服务方法写一个测试方法。在这个服务方法中,我们调用一个查询,从数据库中获取数据,并在函数中使用该值进行一些处理。我想只打这个电话。这是我的函数

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

希望对大家有用

最新更新