【问题标题】:Junit - Test Hibernate Service ResultsJunit - 测试休眠服务结果
【发布时间】:2023-03-28 02:10:01
【问题描述】:

我有一个 DAO 服务,它可以检索数据并将其保存到 Hibernate。 任何人都可以指出我使用 JUnit 来测试这种服务的方法。

最佳做法是什么?我什么时候应该通过测试失败测试,​​我应该测试异常?

【问题讨论】:

    标签: unit-testing hibernate junit java


    【解决方案1】:

    您应该测试 DAO 中的所有可能路径。您肯定会使用内存数据库进行测试,例如 HSQLDB

    一种策略是在您的 setUp() 方法中为数据库提供一些初始数据并在 tearDown() 上清理它,这样所有测试都有一个一致的工作环境。

    通过这些设置,您基本上可以完成所有操作...例如,如果您想在 DAO 中测试 save() 方法,只需添加新元素并确保您的表现在还有一个元素。此外,获取该元素并将其与您插入的元素进行比较,它显然应该是相同的。

    请记住,您应该始终测试所有可能的路径

    【讨论】:

    • 感谢 tearDown() 和 setUp(),但我应该为每种方法做多少测试?我应该进行通过/失败和异常测试吗?我可以意识到时间测试在数据库测试方面是非常有趣的测试。
    • DAO 方法中的每个路径都应该是一个单独的测试。例如,如果一个 DAO 方法有一个在条件查询上设置条件的 if-else 块,则对该方法有两个测试是有意义的,每个测试都测试通过 if-else 的路径之一。如果您在 DAO 方法中有自定义逻辑会引发异常,那么这也值得测试。但是,我不会花时间测试底层框架(Hibernate、JDBC 等)引发的异常,因为您正在测试别人的代码而不是您自己的代码 - 您最终会在 N 个地方重复测试
    • 您应该检查快乐的路径以及不快乐的路径。例如,如果在声明为 UNIQUE 的字段上插入两个“相等”的元素会发生什么?你处理那个案子吗?如果我尝试更新一个不存在的元素怎么办?您必须能够回答这些问题才能提供可靠的代码。如果您抛出异常以表示某些错误,请通过编写触发该错误的测试来确保代码实际上正在抛出它。
    【解决方案2】:

    我还会考虑使用DBUnit 来确保您的数据库是一致的并且独立于测试。他们有关于如何开始的文章和教程。您可能还想阅读很多articles on IBM's DeveloperWorks 博客。

    【讨论】:

      【解决方案3】:

      我认为使用内存数据库通常是一个好主意 - 用于单元测试。但理想的做法是将快速单元测试与此类数据库与针对真实数据库的集成测试相结合。例如,Hypersonic SQL 和大多数生产服务器之间存在细微差别。

      考虑使用模拟来测试您的错误处理(即模拟 Hibernate 会话对象并使其针对某些操作抛出异常)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        相关资源
        最近更新 更多