体验了下ApacheCommonsCLi 工具,发现非常好用,可以建立命令行
不说废话了,奉上例子:
- /**
- * @author charles.wang
- * @created Jan 10, 2012 4:30:22 PM
- * Description:
- */
- public class RMDataSource {
-
- //简单的测试下
- public static int simpleTest(String[] args){
- ResourceBundle resourceBundle = ResourceBundle.getBundle("message",Locale.getDefault());
- //创建一组Option并且封装在Options对象中
- Options opts = new Options();
- //每个选项有3个参数,
- //第一个参数是简短的名字,
- //第二个参数是这个命令选项是否需要参数,
- //第三个参数是这个选项的描述
- opts.addOption("h", false, resourceBundle.getString("HELP_DESCRIPTION"));
- opts.addOption("i", true, resourceBundle.getString("HELP_IPADDRESS"));
- opts.addOption("p", true, resourceBundle.getString("HELP_PORT"));
- opts.addOption("t", true, resourceBundle.getString("HELP_PROTOCOL"));
- //创建一个基本解析器
- BasicParser parser = new BasicParser();
- //表示一个命令行对象,将会被Options所解析
- CommandLine cl;
- try {
- //让解析器来基于Options来解析命令行传入的参数,解析的结果放入CommandLine对象
- cl = parser.parse(opts, args);
- //如果解析完得到的Option的集合长度不为空,表明有一些选项
- if (cl.getOptions().length > 0) {
- //对选项进行判断,首先看是否有-h选项,这个选项是用于打印出帮助,不做其他任何动作
- //如果有h选项,则用HelpFormatter打印出所有选项列表
- if (cl.hasOption('h')) {
- //用于打印出帮助选项的HelpFormatter
- HelpFormatter hf = new HelpFormatter();
- hf.printHelp("Options", opts);
- return 0;
- }
- //否则,将这些选项分离出来,并且来执行判断和构建动作
- else {
- //分离出这些选项名对应的值
- String ip = cl.getOptionValue("i");
- String port = cl.getOptionValue("p");
- String protocol = cl.getOptionValue("t");
- System.out.println("ip: "+ip);
- System.out.println("port: "+port);
- System.out.println("protocol: "+protocol);
- return 0;
- }
- }
- //否则,表明没有解析到任何的选项,所以就出错
- else {
- System.err.println(resourceBundle.getString("ERROR_NOARGS"));
- return 1;
- }
- } catch (ParseException e) {
- e.printStackTrace();
- return 1;
- }
- }
- }
单元测试:
- public class RMDataSourceTest {
- @Before
- public void setUp() throws Exception {
- }
- @After
- public void tearDown() throws Exception {
- }
- // 测试带有 –h 参数的代码功能,则应该打印出帮助文档,并且正确返回
- @Test
- public void testHelp() {
- System.out.println("***TC:Test -h option***");
- String args[]={"-h"};
- assertEquals(0, RMDataSource.simpleTest(args));
- System.out.println("***********************");
- }
- // 测试没有带 –h 参数的代码功能 ,则 应该有错误,因为不允许没有参数的命令行
- @Test
- public void testNoArgs() {
- System.out.println("***TC:Test no argument options***");
- String args[] = new String[0];
- assertEquals(1, RMDataSource.simpleTest(args));
- System.out.println("***********************");
- }
- // 测试输入所有正确参数的代码功能,此时应该正确返回
- @Test
- public void testRMDataSource() {
- /**
- * 此字符串参数等同于在命令行窗口输入命令 java rmdatasource -i 192.168.0.2 -p 5988 -t http
- */
- System.out.println("***TC:Test normal arguments options***");
- String args[] = new String[]{"-i","192.168.0.2","-p","5988","-t","http"};
- assertEquals(0, RMDataSource.simpleTest(args));
- System.out.println("***********************");
- }
- }
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/840707,如需转载请自行联系原作者