测试数据访问对象

时间:2016-07-05 12:00:20

标签: unit-testing dao data-access-object

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

  • 使用内存数据库
  • 重置每个测试的数据库数据

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

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

网上有些人建议嘲笑一切,但这并不能真正测试任何东西。

那么,如何测试DAO?

2 个答案:

答案 0 :(得分:2)

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

1)测试POJO(单元测试)

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

3)测试DAO用户类。

1) 测试POJO

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

2)测试DAO&#39>

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

3)测试DAO用户类:

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

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

答案 1 :(得分:1)

你没有真的必须测试DAO,前提是它们足够苗条(应该是这样)并且不包含业务逻辑。在为某些事情编写一些系统/集成测试时,你会在某些时候无意中测试它们。

根据您正在使用的内容(ORM框架?),您可能能够存根/模拟内容,但它很少值得。

至于在NUnit中使用连接字符串(以便操作测试项目中的数据库),我发现一般情况下没有任何问题,它比你想象的更常见。