当前位置: 首页 > 知识库问答 >
问题:

使用Java8编写的DAO类方法的Mockito测试用例

岳英锐
2023-03-14
public class DBConnectionDAOImpl {

public List<String> getData{
    return jdbcTemplate.query("Select abc from table_name ", (ResultSet rs) -> getAllData(rs));
}

public List<String> getAllData(ResultSet rs){
    List<String> ls = new ArrayList<>();
    try{
        while(rs.next()){
            ls.add(rs.getString("pk"));
        }
        return ls;
    }catch(Exception e){


    }
}

}

public class DBConnectionDAOImplTest {

@InjectMock
DBConnectionDAOImpl dbConnectionDAOImpl;

@MOck
JdbcTemplate jdbcTemplate;

@Test
public void getDataTest(){
    ResultSet rs = Mockito.mock(ResultSet.class);
    when(rs.next().thenReturn(true).thenReturn(false));
    when(rs.getString("pk")).thenReturn("someVal");
    when(dbConnectionDAOImpl.getAllData(rs)).thenReturn(new ArrayList<String>());
    when(jdbcTemplate.query("Select abc from table_name ", (ResultSet rs) -> dbConnectionDAOImpl.getAllData(rs))).thenReturn(new ArrayList<String>());

    List<String> result = dbConnectionDAOImpl.getData();
    assertNotNull(result);
}
when(dbConnectionDAOImpl.getAllData(rs)).thenReturn(new ArrayList<String>());

---编辑1--更改

 when(dbConnectionDAOImpl.getAllData(rs)).thenReturn(new ArrayList<String>());

根据注释,断言是失败的。

共有1个答案

麹培
2023-03-14

在我的评论中提供的链接中,尝试更改:

when(dbConnectionDAOImpl.getAllData(rs)).thenReturn(new ArrayList<String>());

doReturn(new ArrayList<String>()).when(dbConnectionDAOImpl).getAllData(rs)
 类似资料:
  • 问题内容: 我已经开始发现Mockito库,并且有一个我没有找到正确答案的问题。 例如,如果我的UserDAO类中有将用户保存到数据库中的此类方法: 我应该如何测试? 如果我想测试一个DAO类,那么我需要创建一个模拟,模拟,模拟等吗?如此不测试数据库本身? 但是,如果我还想测试dao和数据库的行为怎么办? 您能否提供一些代码示例,可能有用的链接,并显示实现此目的的最佳方法? 问题答案: 这是使用M

  • 我有一些使用Calendars编写的旧的方便方法,我想更新它们以使用Java8中引入的Java.time.*类。我类中的一些方法获取当前时间甚至只是当前小时的数量。 我计划为每个方法编写两个变体:一个假设时区是这台计算机上定义的默认时区,另一个允许用户指定所需的时区。 我想弄清楚两件主要的事情: 如何在我的方法中获取当前时间戳 如何使用不同的当前时间戳源对结果进行单元测试 关于方法本身,我倾向于创

  • customer-Mapper.xml daoimpl.java

  • 我在java中使用mockito编写单元测试。 这就是我要测试的声明。 电影是电影名称的集合,是识别电影的关键。 我嘲笑了守望者班 Mockito.when(watcher.watch(Matchers.any(Set.class))) “thenReturn”中包括什么??

  • 我有下面的类,我测试了method1,并模拟了method2和method3。我只测试这样的用例:*如果method2调用是OK,那么==>OK*如果method2抛出NotFoundException,method3返回OK==>OK*如果method2抛出NotFoundException,method3抛出ServiceException==>ServiceException确实抛出了 为了

  • 我有DaoImpl类: 我的测试是: 测试是成功的,但是当我运行具有覆盖率的junit测试时,它显示方法没有被覆盖,因此我的整体单元测试行覆盖率低于要求。我们能涵盖那部分吗?如果是,我们怎么做?谢了。