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

我在Java编程,我的应用程序正在做很多使用DB。因此,重要的是我能够轻松地测试我的数据库使用。

什么是数据库测试?对我来说,他们应该提供两个简单的要求:

>验证SQL语法。

>更重要的是,根据给定的情况检查数据是否被正确选择/更新/插入。

那么,看来我需要的是一个DB。

但实际上,我不喜欢,因为使用DB进行测试有几个困难:

>“只是给自己一个测试DB,它有多难? – 好吧,在我的工作地点,有一个个人测试DB是很不可能的。你必须使用一个“公共”数据库,所有人都可以访问。

>“这些测试肯定不是很快…” – DB测试往往比通常的测试慢。慢慢测试真的不理想。

>“这个程序应该处理任何情况! – 它变得有点恼人,甚至不可能尝试和模拟每个案例在一个数据库。对于每种情况,应该进行一定量的插入/更新查询,这是烦人的,需要时间。

>“等一下,你怎么知道那个表中有542行?” – 测试的主要原则之一是能够以不同于测试代码的方式测试功能。当使用DB时,通常有一种方法来做某事,因此测试与核心代码完全相同。

所以,你可以弄清楚,我不喜欢DBs,当谈到测试(当然,我必须得到这一点,但我宁愿到那里我的测试,后我发现大多数错误使用其余的测试方法)。但我正在寻找什么?

我正在寻找一种方法来模拟一个数据库,一个模拟DB,使用文件系统或只是虚拟内存。我认为也许有一个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 fields = new HashMap();

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查询是相当简单,不应该从一个平台到另一个不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值