1

描述

我有一个命令行对象来解析我传递给它的选项。下面我向命令行传递了 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>
4

1 回答 1

0

Options.getOptions()故意返回 aunmodifiableCollection以不允许此类修改。

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

例如,通过仅测试设置器进入您的命令行处理,它用减少的选项集替换选项。可能通过读取原始集合中的选项并添加除您要过滤的选项之外的所有选项,例如

Options testOptions = new Options();
for(Option option : options.getOptions) {
    if(!option.getArg().equals(...)) {
        testOptions.addOption(testOptions);
    }
}
于 2018-02-09T11:14:53.990 回答