【问题标题】:Database Unit Testing using JUnit [closed]使用 JUnit 进行数据库单元测试 [关闭]
【发布时间】:2011-10-04 13:33:07
【问题描述】:

我对@9​​87654323@和TestNG有一点小经验,今天需要对Java数据库代码做一些单元测试。

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

有什么线索可以给我吗?

谢谢。

EDIT

你怎么看DbUnit

【问题讨论】:

  • 您需要提供更多详细信息。您想在数据库中测试什么。您的数据库连接(或与 db 有关的其他参数)或您的数据访问层。如果你想测试你的数据访问层,什么样的。 (实体,ORM,如 Hibernate 等)
  • 我使用JDBC来操作数据库,没有hibernate没有struts(没有框架)

标签: java database unit-testing junit testng


【解决方案1】:

你可以从DbUnit开始。

顺便说一句,当您对访问数据库的类进行单元测试时,您不会测试数据库。您应该在测试之前和之后将数据库置于已知状态,并且您应该验证您的类是否已履行其约定。

您的以下内容更具体地介绍了 DbUnit:

您对 DbUnit 的看法

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

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

【讨论】:

    【解决方案2】:

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

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

    例如,Spring 通过TestContext transaction management 开箱即用地支持此功能。为此,您可以考虑在测试中使用 Spring。使用 JDBC,您可以在没有它的情况下轻松管理测试中的事务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2018-09-12
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      相关资源
      最近更新 更多