Apache CLI CommandLine:删除已解析的选项

时间:2018-02-08 10:56:29

标签: java apache-commons-cli

描述

我有一个CommandLine对象,用于解析我传递给它的Options。下面我向命令行传递了2个选项。

String[] userInputs = {"-option1","value1","option2","value2"};
    Options options = new Options();
    options.addOption(OptionBuilder.create("option1"));
    options.addOption(OptionBuilder.create("option2"));
    CommandLine commandLine = null;
    try {
        commandLine = new BasicParser().parse(options,userInputs);
    } catch (ParseException e) {
        e.printStackTrace();
    }

问题

我有一个要求,我想通过从命令行中删除一个或多个选项(比如,option2)来运行一些单元测试。我尝试过这种方法 -

options.getOptions().remove(options.getOption("option2"));

但是这给了我一个java.lang.UnsupportedOperationException。 我正在寻找一种干净的方法来删除我选择的任何选项。

Maven依赖是 -

<dependency>
    <groupId>commons-cli</groupId>
    <artifactId>commons-cli</artifactId>
    <version>1.2</version>
</dependency>

1 个答案:

答案 0 :(得分:0)

Options.getOptions()有意返回unmodifiableCollection以禁止此类修改。

因此,您需要将整个Options对象替换为用于测试的对象。

E.g。通过仅测试的setter进入命令行处理,用一组简化的选项替换选项。可能是从原始集中读取选项并添加除了要过滤的所有选项之外的所有选项,例如

之类的东西
Options testOptions = new Options();
for(Option option : options.getOptions) {
    if(!option.getArg().equals(...)) {
        testOptions.addOption(testOptions);
    }
}