我用 Java 编程,我的应用程序大量使用 DB。因此,能够轻松地测试数据库使用情况对我来说很重要。
DB 测试是关于什么的? 对我来说,它们应该提供两个简单的要求:
看来我只需要一具尸体。
但实际上,我不希望这样,因为使用 DB 进行测试没有什么困难:
所以,当涉及到测试的时候,你可以发现我不喜欢 DBs (当然,在某些时候我将不得不这样做,但是我宁愿稍后在我的测试中,在我使用其余的测试方法发现大多数 bug 之后再去做)。但我要找什么?
我正在寻找一种方法来模拟数据库,模拟数据库,使用文件系统或只是虚拟内存。我认为也许有一个 Java 工具/包,允许每个测试简单地构造(使用代码接口)一个 DB 模拟,带有模拟的表和行,带有 SQL 验证,并带有监视其状态的代码接口(而不是使用 SQL)。
你熟悉这种工具吗?
编辑: 谢谢你的回答!虽然我要求一个工具,你也提供了一些关于这个问题的提示我:)这将花费我一些时间来检查你的报价,所以我现在不能说你的答案是否令人满意不是。
无论如何,这里有一个我正在寻找的更好的视图——假设一个名为 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 查询非常简单,不应该因为平台不同而有所不同。