2016-07-05 52 views
1

当测试一个DAO我遵循下列规则:测试数据访问对象

  • 使用的内存数据库
  • 每一个测试复位数据库的数据

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

但是,当测试插入,更新和删除它变得丑陋。我必须编写一个自定义选择语句来验证数据库中是否插入/更新/删除了正确的数据。所以当我完成写测试时,我可以再次测试我的测试。

网络上的一些人建议嘲笑字面上的一切,但这并不真正测试任何imo。

那么,如何测试一个DAO?

回答

1

你不需要真的必须测试DAO,只要它们足够苗条(应该是),并且不包含业务逻辑。在写某些系统/集成测试时,您会在某个时候无意中测试它们。

根据你使用的是什么(ORM框架?)你可能能够存根/模拟东西,但它很少值得。

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

+0

谢谢你的回答,但我没有完全得到最后一部分。 NUnit中的连接字符串是什么?它与这个问题有什么关系? –

+0

你说得对,我没有那么清楚,因为我不知道你在测试什么语言/框架(C#/ Java?)。你提到你正在重新设置每个测试(之前/之后?)的数据库数据 - 你可能通过直接从你的测试项目连接到数据库来做到这一点,这很好。 –

+0

我明白了。我其实没有特定的语言/框架。我正在寻求一个通用的方法。 –

2

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

1)测试POJO的(单元测试)

2)测试DAO的由(集成测试)

3)测试DAO用户类。

1)测试POJO的:

这是一个非常简单,没有什么做的DAO测试。主要是为了增加项目的测试覆盖率,并且通常测试一个普通对象的setter和getters。

2)测试DAO的:

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

3)测试DAO用户类:

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

有很多嘲笑工具,如EasyMock,PowerMockito和PowerMock。在DAO嘲讽案例中(因为我们已经测试过DAO,所以我们可以嘲笑它们),我们可以通过使用PowerMock来模拟。