如何使用DAO类编写单元测试(JUnit)来检查数据库连接?

时间:2015-06-09 18:21:33

标签: java database unit-testing junit dao

我有一个名为PersonDAO的DAO类,我正在使用它来获取有关People from Database的信息。我想编写单元测试来检查数据库连接。这就是我到目前为止所拥有的

@Test( expected= SQLException.class)
public void testDatabaseConnection()
    throws Exception {



}

另外,如何为findAll()方法编写单元测试?如果我将人物信息存储在地图中,这就是我所拥有的。但是,我想知道如果我有数据库而不是地图会发生什么变化

@Test
public void testFindAll()
    throws Exception {

    Map< Integer, PersonDTO > people = new LinkedHashMap<>();
    people = PersonDAO.findAll();

    assertEquals( PersonDTO.getTotalDept(), people.size() );
}

2 个答案:

答案 0 :(得分:2)

基本上,如果您想在“实时”数据库上测试DAO,那么您正在讨论集成测试。

PersonDTO personDto;
Connection connection;

@Before
public void setUp() {
    personDto = new PersonDTO();
    connection = ConnectionUtil.someMethodThatReturnsConnection();
}

@Test
public void testIfConnectionNotNull() {
    assertNotNull(connection);
}

@Test
public void testIfDAONotNull() {
    assertNotNull(personDto);
}

@Test
public void testFindAll() {
    // Let's presume you have 4 records
    assertEquals(4, personDto.findAll().size());
}

如果你想留在JUnit,Mockito,EasyMock ......就是答案。

答案 1 :(得分:0)

看一下这个问题,回答你的第一个问题 - 如何创建数据库连接。 JUNIT test case for connection with database

要回答第二个问题,关于如何测试"findAll",您需要问问自己这种方法的作用。例如。它会显示所有用户记录,然后首先检查表中有多少用户并将其存储在变量中。然后插入另一个用户并再次调用findAll并计算返回的行数。然后测试你是否有previousCount + 1 == currentCount