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

Posted

技术标签:

【中文标题】如何编写单元测试 (JUnit) 以使用 DAO 类检查数据库连接?【英文标题】:How do I write unit test (JUnit) to check Database connection using DAO class? 【发布时间】:2015-08-24 17:36:41 【问题描述】:

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

@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() );

【问题讨论】:

单元测试不是不同的语言或方法。您测试数据库连接的方式与在主程序中建立连接的方式相同。 测试 findAll 首先测试您当前在数据库中有多少个值,然后添加一个值......然后再次计数。测试必须是 previousCount + 1 = currentCount 但我不确定测试数据库连接的语法。我假设我们需要使用 Connection 类。你能告诉我语法吗? 好吧,我明白你的疑问了。没有 SQL 语句来检查连接是否建立。只需尝试获取记录。如果没有连接,会抛出Error 我需要为此编写 SQL 查询吗?例如:让所有人使用“SELECT *”? 【参考方案1】:

基本上,如果您想在“实时”数据库上测试您的 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... 是一个答案。

【讨论】:

你能告诉我如何编写测试用例来检查数据库连接吗? 只需拨打assertNotNull并通过连接。 我是否也可以使用查询来检查我是否可以访问数据库?例如,我尝试使用“SELECT * FROM PersonDatabase”从数据库中检索所有数据,如果该操作不成功,则连接存在问题。如果是,我该如何实际编写代码? @user3528213 如果该操作不成功,并不意味着它是连接问题。如果连接成功,那么您可以访问数据库(testIfConnectionNotNull 方法可以做到这一点)。如果您的查询未返回预期值,则说明该查询存在问题。没有连接。 假设如果一个方法有这样的东西:try // db call catch (Exception e) return false 检查这个方法的好测试用例是什么?【参考方案2】:

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

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

【讨论】:

以上是关于如何编写单元测试 (JUnit) 以使用 DAO 类检查数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JUnit 和 Mockito 对 DAO 类进行单元测试

使用JUnit4编写Solr插件的单元测试,包括创建集合

使用JUnit配置IntelliJ IDEA以进行单元测试

SpringBootTest 用于 DAO JUnit 测试

DAO层单元测试编码和问题排查

Junit4入门之如何编写好的测试类