使用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模拟声明的主要内容,如果未能解决你的问题,请参考以下文章

使用Mockito模拟Apache HTTPClient

使用 Mockito 时,模拟和间谍有啥区别?

使用 Mockito 模拟本地范围对象的方法

如何使用 Mockito 框架模拟我的服务

如何在 Java 中使用 Mockito 模拟结果集并填充它

Mockito 对象不是声明类的实例