1

在测试 DAO 时,我遵循以下规则:

  • 使用内存数据库
  • 为每次测试重置数据库数据

这适用于从数据库中进行选择。我使用选择所需的数据设置数据库,调用我的 DAO 并验证返回的对象是否具有正确的值。

但是在测试插入、更新和删除时,它会变得很难看。我必须编写一个自定义选择语句来验证,在我的数据库中插入/更新/删除了正确的数据。因此,当我完成编写测试时,我也可以再次测试我的测试。

网络上的一些人建议从字面上模拟一切,但这并不能真正测试任何东西。

那么,如何测试 DAO?

4

2 回答 2

2

测试 DAO 包括 3 个不同的步骤。

1) 测试 POJO(单元测试)

2)通过(集成测试)测试DAO

3) 测试 DAO 用户类。

1) 测试POJO:

这个非常简单,与 DAO 测试无关。主要是为了增加项目的测试覆盖率,通常测试普通对象的 setter 和 getter。

2)测试DAO的:

这是一个集成测试,它不会增加单元测试的覆盖率。在这种情况下,必须创建并运行一个测试数据库。之后打开一个测试数据库会话并添加所有 daoMapper。完成此设置后,dao 类的所有方法都会被一一调用和测试。

3)测试DAO用户类:

在单元测试实现中,模拟对象是一种非常有用的方法。当您正在测试一个类并且该类使用其他服务、方法和类时;您可以轻松地模拟这些服务、类和方法,因为它们可能已经在其他地方进行了测试。通过模拟,我们的意思是假设一个特定的方法返回一些特定的值或一个对象。

有很多模拟工具,例如 EasyMock、PowerMockito 和 PowerMock。在 DAO 模拟案例中(因为我们已经在上面测试过 DAO,我们可以模拟它们)我们可以使用 PowerMock 进行模拟。

于 2016-07-25T05:39:11.753 回答
1

实际上不必测试 DAO,只要它们足够苗条(应该如此)并且不包含业务逻辑。在为其他东西编写一些系统/集成测试时,您会在某个时候无意中测试它们。

根据您使用的内容(ORM 框架?),您可能可以存根/模拟东西,但这很少值得。

至于在 NUnit 中使用连接字符串(以便从您的测试项目中操作数据库),我认为一般来说没有任何问题,它比您想象的更常见。

于 2016-07-06T09:09:54.847 回答