在DBUnit中使用脚本来生成测试数据

在DBUnit中使用脚本来生成测试数据

用过rails 的人都会觉得rails的测试中,fixtures 实在是一个非常方便的工具。在Java中,我们通常会使用dbunit 来维护我们的测试数据,但是,dbunit有一个不方便的地方,就是测试数据要手写。虽然我们也可以从数据库中导出来,但这并不是万灵药。
在Rails中,我们可以在fixtures中写ruby 代码,这称为动态fixtures。在dbunit 中如果也能这么做就好了!

首先,如果要实现这个功能,那么肯定涉及动态脚本的内容。自己写一个?太费劲了,浪费时间,最主要是没这个能力:)。
那么怎么办?当然是“站在巨人的肩膀上”了!目前java所支持的动态脚本很多,不过我还是选择了一个大家都熟悉的脚本:javascript。没别的原因,就是因为它简单,而且大家都熟悉。
好了,那么我们有了一个大致的思路,就是用一个工具,去读javascript脚本,这个javascript当然负责动态生成 dbunit所需要的xml信息,然后dbunit再根据这些动态生成的xml信息,去维护数据库的信息。
Java 解析javascript的内容,大家可以去看看 http://www.iteye.com/topic/87423 。这里所介绍的rhino功能强大,但是我们没必要用那么多,只要能执行函数就行了。

多说无益,下面介绍一下步骤。

首先写一个javascript,用于生成dbunit 所需的xml信息:


function create_dataset_xml_msg() {
var dataset_xml_msg;
dataset_xml_msg = '<dataset>\n';
for(var record_count = 0; record_count <10; record_count++) {
dataset_xml_msg += '<test1 user_name="user_'+record_count+'"/>\n';
}
dataset_xml_msg += '</dataset>\n';
return dataset_xml_msg;
}
create_dataset_xml_msg();



记住,javascript的最后一定要调用一下函数,因为解析器是不知道该调用哪个函数的。

下面就是解析这个javascript的方法:


public static InputStream LoadDataSetStr() throws Exception{

Context cx = Context.enter();

cx.setLanguageVersion(Context.VERSION_1_2);

Scriptable scope = cx.initStandardObjects();

File file = new File("dataset.js");

LineNumberReader ln = new LineNumberReader(new FileReader(file));
String js = "";
String s;

while((s = ln.readLine())!=null) {

js += s+"\n";
}

Object result = cx.evaluateString(scope, js,
null, 1, null);


String jsResult = cx.toString(result);

ByteArrayInputStream ba = new ByteArrayInputStream(jsResult.getBytes());

return ba;

}



用了rhino的最基本的方法,这个方法返回的是 InputStream类型,因为dbunit需要InputStream类型作为输入。

DbUnit 的内容就不说了,大家可以google it,用起来不难。

通过dbunit + rhino 的结合,我们就可以实现用脚本来维护测试数据了!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值