如何编写单元测试 (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 类进行单元测试