gpt4 book ai didi

java - 如何模拟用于测试的数据库(Java)?

转载 作者:IT老高 更新时间:2023-10-28 13:53:36 25 4
gpt4 key购买 nike

我正在使用 Java 编程,我的应用程序大量使用 DB。因此,能够轻松测试我的数据库使用情况对我来说很重要。
数据库测试的全部内容是什么?对我来说,他们应该提供两个简单的要求:

  1. 验证 SQL 语法。
  2. 更重要的是,根据给定的情况检查数据是否被正确选择/更新/插入。

那么,看来我只需要一个数据库。
但实际上,我不喜欢,因为使用数据库进行测试几乎没有困难:

  • “给自己弄个测试数据库,有多难?” - 嗯,在我的工作场所,拥有一个个人测试数据库是几乎不可能的。您必须使用所有人都可以访问的“公共(public)”数据库。
  • “这些测试肯定不快...” - DB 测试往往比通常的测试慢。慢速测试确实不太理想。
  • “这个程序应该可以处理任何情况!” - 尝试模拟数据库中的每个案例变得有些烦人甚至不可能。对于每种情况,都应该进行一定数量的插入/更新查询,这很烦人并且需要时间。
  • “等一下,你怎么知道那个表有 542 行?” - 测试的主要原则之一是能够以不同于测试代码的方式测试功能。使用数据库时,通常只有一种方法可以做某事,因此测试与核心代码完全相同。

所以,你可以发现我在测试方面不喜欢 DB(当然,我必须在某个时候做到这一点,但我宁愿稍后在我的测试中到达那里,在我发现大多数使用其余测试方法的错误)。但我在寻找什么?

我正在寻找一种方法来模拟数据库、模拟数据库、使用文件系统或仅使用虚拟内存。我认为也许有一个 Java 工具/包允许简单地构造(使用代码接口(interface))每个测试的 DB 模拟,模拟表和行,SQL 验证,以及用于监视其状态的代码接口(interface)(而不是使用 SQL )。

你熟悉这种工具吗?


编辑:感谢您的回答!虽然我要的是一个工具,但你也给了我一些关于这个问题的提示:) 我需要一些时间来查看你的报价,所以我现在不能说你的答案是否令人满意。

无论如何,这是我正在寻找的更好的 View - 想象一个名为 DBMonitor 的类,它的一个功能是查找表中的行数。这是我想如何使用 JUnit 测试该功能的虚构代码:

public class TestDBMonitor extends TestCase {

@Override
public void setUp() throws Exception {

MockConnection connection = new MockConnection();

this.tableName = "table1";
MockTable table = new MockTable(tableName);

String columnName = "column1";
ColumnType columnType = ColumnType.NUMBER;
int columnSize = 50;
MockColumn column = new MockColumn(columnName, columnType, columnSize);
table.addColumn(column);

for (int i = 0; i < 20; i++) {
HashMap<MockColumn, Object> fields = new HashMap<MockColumn, Object>();
fields.put(column, i);
table.addRow(fields);
}

this.connection = connection;
}

@Test
public void testGatherStatistics() throws Exception {

DBMonitor monitor = new DBMonitor(connection);
monitor.gatherStatistics();
assertEquals(((MockConnection) connection).getNumberOfRows(tableName),
monitor.getNumberOfRows(tableName));
}

String tableName;
Connection connection;
}

我希望这段代码足够清晰,可以理解我的想法(请原谅我的语法错误,我是在没有亲爱的 Eclipse 的情况下手动输入的:P)。

顺便说一句,我部分使用 ORM,而且我的原始 SQL 查询非常简单,应该不会因平台而异。

最佳答案

Java 自带 Java DB .

也就是说,除非您通过 ORM 层,否则我建议您不要使用与您在生产中使用的不同类型的数据库。否则,您的 SQL 可能不会像您想象的那样跨平台。

还可以查看 DbUnit

关于java - 如何模拟用于测试的数据库(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/928760/

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