2011-07-13 64 views
2

我对JUnitTestNG有一点经验,今天我需要为Java数据库代码做一些单元测试。使用JUnit进行数据库单元测试

我真的不知道我怎么能做到这一点。因为我认为测试数据库比普通代码更困难。

有什么线索可以给我吗?

谢谢。

EDIT 

你怎么看待DbUnit

+0

您需要提供更多的细节。你想在数据库中测试什么?你的数据库连接(或其他与db相关的参数)或数据访问层。如果你想测试你的数据访问层,是什么样的。(实体,ORM像休眠等) –

+0

我使用JDBC来操纵数据库,没有休眠没有struts(没有框架) –

回答

4

可以开始使用DbUnit

顺便说一下,当您单元测试访问数据库的类时,您不测试数据库。您应该在测试前后将数据库置于已知状态,并且您应该验证您的课程是否已履行合同。

你下面是更具体的了解的DbUnit:

你认为怎么样的DbUnit

的DbUnit已经有相当一段时间。就简单的DAO(数据访问对象)实现而言(假设您遵循DAO模式),DbUnit非常适合,因为您可以在测试DAO之前设置数据库的状态,然后针对DAO类并验证预期操作是否成功完成。像其他JUnit测试一样,如果DAO的合同指定抛出异常,例如在未找到数据的情况下,您也可以期望DAO抛出异常。

请记住,对数据库进行测试没有什么特别之处。你应该专注于测试你的类而不是测试数据库。简而言之,数据库(和JDBC驱动程序)应该被视为SUT(系统测试)的协作者,而不是SUT。这是你应该测试的DAO类和他们的合同。

4

数据库测试的一种常见方法是在一个永远不会提交的事务中运行每个测试。这通常适用于大多数集成测试(但不是全部)。这保证了测试不会使数据库处于不确定状态,并最大限度地减少由于数据库状态而导致的测试相关性。

在运行它们之前,您仍然需要生成测试夹具数据。在少数情况下,您必须提交您需要在测试清理中发出补偿性事务。

例如,Spring通过TestContext transaction management支持开箱即用。你可以考虑在你的测试中使用Spring。使用JDBC,您可以轻松管理测试中的事务。