51CTO技术论坛_中国领先的IT技术社区's Archiver

wangbingxin 发表于 2007-8-23 10:50

BeanShell 在人工测试与管理中的应用

JUnit 单元测试学深入人心的同时,也发现它对用户交互测试无能为力:

TestCase 允许测试人员作动态的修改
可以在Test Case 中实现一个测试参数输入功能(UI 或参数配置文件)来解决这个问题,但实现这些功能的代价与重复工作量会很大。
TestCase 可以方便地重复使用、组合、保存
不是所有所有测试环境下,都容许打开一个重量级的 Java IDE 编写有严格规范的 Java 代码。这就是脚本语言受欢迎的原因。
BeanShell 可以较好解决以上问题。
[b]1.BeanShell[/b][b]基本:[/b]
bsh.Interpreter 是beanShell 的主要接口。

[b]以下可以实现一个简单的[/b][b]Java Shell:[/b]
[b]public[/b][b] [/b][b]class[/b][b] TestInt {[/b]
[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {
bsh.Interpreter.[i]main[/i](args);
}
}
结果:

[i]BeanShell 2.0b4 - by Pat Niemeyer ([email]pat@pat.net[/email])[/i]
[i]bsh % [/i][i]System.out.println("Hello BeanShell");[/i]
[i]Hello BeanShell[/i]
[i]bsh % [/i]


你也可以用以下代码实现同样的功能,代码中可以比较明显地看出其结构:

[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) {
Reader in = [b]new[/b] InputStreamReader( System.[i]in[/i] );
PrintStream out = System.[i]out[/i];
PrintStream err = System.[i]err[/i];
[b]boolean[/b] interactive = [b]true[/b];;
bsh.Interpreter i = [b]new[/b] Interpreter( in, out, err, interactive );
i.run();//线程在这里阻塞读System.in
}



[b]1.1.BeanShell[/b][b]上下文[/b][b](Context/Namespace)[/b][b]:[/b]

[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) [b]throws[/b] Throwable {
Reader in = [b]new[/b] InputStreamReader( System.[i]in[/i] );
PrintStream out = System.[i]out[/i];
PrintStream err = System.[i]err[/i];
[b]boolean[/b] interactive = [b]true[/b];;
bsh.Interpreter i = [b]new[/b] Interpreter( in, out, err, interactive );
Collection theObjectReadyForShellUser = [b]new[/b] ArrayList();
theObjectReadyForShellUser.add("Str1");
i.set("myObject", theObjectReadyForShellUser);
i.run();
}

用户的UI:

[i]BeanShell 2.0b4 - by Pat Niemeyer ([email]pat@pat.net[/email])[/i]
[i]bsh % [/i][i]System.out.println( myObject.get(0) );[/i]
[i]Str1[/i]
[i]bsh % [/i]

Shell的上下文在测试中特别有用。想一下,如果将上面的“theObjectReadyForShellUser”换成一个预先为测试用户生成的RMI本地接口存根,由测试用户调用相应的存根方法。这可应用于动态测试,也可以应用于系统的远程管理。

[b]1.2.[/b][b]静态[/b][b]Java[/b][b]代码与动态[/b][b]Java[/b][b]代码的组合使用。[/b]
[b] [/b]

[b]public[/b] [b]static[/b] [b]void[/b] main(String[] args) [b]throws[/b] Throwable {
Reader in = [b]new[/b] InputStreamReader( System.[i]in[/i] );
PrintStream out = System.[i]out[/i];
PrintStream err = System.[i]err[/i];
[b]boolean[/b] interactive = [b]true[/b];;
bsh.Interpreter i = [b]new[/b] Interpreter( in, out, err, interactive );
//show a dialog for user to input command.
String command = JOptionPane.[i]showInputDialog[/i]( "Input Command(s)" );
i.eval( command );//Run the command
}

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.