测试数据访问对象

Testing Data Access Objects

在测试 DAO 时,我遵循这些规则:

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

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

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

那么,如何测试 DAO?

真的不必 测试 DAO,前提是它们足够精简(它们应该如此)并且不包含业务逻辑。在为其他内容编写一些 system/integration 测试时,您会在某个时候无意中测试它们。

根据您使用的内容(ORM 框架?),您也许可以 stub/mock 东西,但很少值得这样做。

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

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

1) 测试 POJO(单元测试)

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

3) 测试 DAO 用户 classes.

1) 正在测试 POJO:

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

2) 测试 DAO:

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

3) 测试 DAO 用户 classes:

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

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