gpt4 book ai didi

java - 使用模拟数据库进行 JUnit 测试

转载 作者:行者123 更新时间:2023-12-01 13:12:10 26 4
gpt4 key购买 nike

我正在开发一个测试不同 Web 服务的应用程序,我希望它尽可能通用。我需要填充数据库来执行 JUnit 测试,但我不希望提交这些更改。我知道一些内存数据库(例如 HSQL DB)允许在某种虚拟(或模拟)数据库上进行测试,但不幸的是我使用 Oracle,由于我复杂的数据表结构,我现在无法更改它。

您建议的最佳做法是什么?谢谢。

最佳答案

首先,HSQL 和 Hibernate 没有任何关系。问题是您是否可以找到一个支持与您的生产数据库相同的 SQL(或者您的应用程序使用的 SQL 子集)的嵌入式数据库。

一个很好的候选者是 H2 database因为它模拟了许多不同的 SQL 风格。

最重要的是:不要测试数据库。假设数据库已经过您的供应商的彻底测试并且可以正常工作。

在我的代码中,我的目标是:

  1. 保存并加载每个实体。

  2. 为我使用的所有查询生成 SQL,并将它们与测试中的字符串文字进行比较(即我不会一直对数据库运行查询)。

  3. 一些测试会寻找系统属性。如果已设置,那么他们将针对数据库运行查询。这发生在我的 CI 服务器上的夜间。

这样做的理由:只要数据库架构不改变,就没有必要实际运行查询。这意味着我白天坐在电脑前运行它们是一种巨大的时间浪费。

为了确保“低影响”的更改不会漏掉,我会在我不在乎的时候让计算机运行它们。

同样,我有许多 DAO 的模拟,它们返回各种预定义的结果,因此我不必查询数据库。这里的基本原理是,我想测试数据库结果的处理,而不是 JDBC API、数据库驱动程序、操作系统的 TCP/IP 堆栈、网络硬件(和软件)或我的计算机之间的 1000 个东西中的任何其他东西。代码和数据库记录在硬盘上的某个地方。

更多详细信息请参阅我的博客:http://blog.pdark.de/2008/07/26/testing-with-databases/

关于java - 使用模拟数据库进行 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22762576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com