基于 Apache Commons CLI 的命令行测试
CLI 的测试可以分为两种情况,内部逻辑的测试可以用 JUnit 来实现,方便、简洁、快速;CLI 的运行可以用脚本(在 Windows 里用 bat 脚本,Linux 上用 shell 脚本)来验证 CLI 的运行结果。
JUnit 的运行与测试在代码清单 5 中,我们可以看到 CLI 接收的参数来源于它的一个 String 输入数组,因此我们可以在 JUnit 的 TestCase 中创建一个 String 数组来模拟输入,以下清单 6 是对 rmdatsource 的 help 有无参数情况的单元测试的代码,仅测试了方法的返回值。
清单 6. JUnit 测试代码片段// 测试带有 –h 参数的代码功能 public void testHelp() { String args[]={"-h"}; assertEquals(0, RMDataSource.simpleTest(args)); } // 测试没有带 –h 参数的代码功能 public void testNoArgs() { String args[] = new String[0]; assertEquals(1, RMDataSource.simpleTest(args)); } // 测试输入所有正确参数的代码功能 public void testRMDataSource() { /** * 此字符串参数等同于在命令行窗口输入命令 java rmdatasource -i 192.168.0.2 -p 5988 -t http */ String args[] = new String[]{"-i","192.168.0.2","-p","5988","-t","http"}; assertEquals(0, RMDataSource.simpleTest(args)); }
CLI 的运行与测试开发完成后,将项目编译成 jar 包即可运行 CLI 了,假定我们的 jar 包名字是 rmdatasource.jar, 则在 jar 包所在目录运行 java –jar rmdatasource.jar –h 即可得到该 CLI 的帮助信息。同样,也可以用脚本来运行所开发的命令行工具,对命令的返回值和输出进行校验,如下图清单 7 即为一段 shell 脚本获取命令的返回值和输出信息的代码。
清单 7. CLI 测试代码片段/opt/ibm/java-i386-60/bin/java -jar /tmp/test/rmdatasource.jar -h > /tmp/test/result echo "cli return code is $?" if [ $? -eq 0 ] then while read line do echo $line done < /tmp/test/result fi
总结随着科学计算可视化及多媒体技术的飞速发展,人机交互技术不断更新,但是最传统的命令行模式依然被广泛的应用于多个领域,因为命令行界面要较图形用户界面节约更多的计算机系统资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。同时,命令行模式也更加有利于客户进行二次开发,方便应用程序的整合。Apache Commons CLI 提供了很多实用的工具和类实现,进一步方便了我们对命令行工具的开发,本文介绍了一个完整的实例,希望能对相关读者在以后的工作有所帮助。