Apache CLI CommandLine: удалить параметр, который был проанализирован

Описание

У меня есть объект CommandLine, который анализирует параметры, которые я передаю ему. Ниже я передал 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();
    }

вопрос

У меня есть требование, где я хочу запустить некоторые модульные тесты, удалив один или несколько параметров (скажем, вариант 2) из ​​командной строки. Я попробовал этот подход-

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 ответ

Options.getOptions() возвращает unmodifiableCollection с целью не допустить таких изменений.

Так что вам нужно будет заменить весь Options объект с тем, который используется для тестирования.

Например, с помощью установщика только для тестирования в вашу командную строку, который заменяет опции сокращенным набором опций. Возможно, прочитав параметры из исходного набора и добавив все, кроме того, который вы хотите отфильтровать, например что-то вроде

Options testOptions = new Options();
for(Option option : options.getOptions) {
    if(!option.getArg().equals(...)) {
        testOptions.addOption(testOptions);
    }
}
Другие вопросы по тегам