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);
}
}