Junit — аргумент командной строки

#java #junit #main

#java #junit #программа-точка входа

Вопрос:

Я только начал изучать JUnit. У меня есть следующий код:

 public class MyClass {
  private void verify(args) {...}
  private void process(clientoptions) {...}

  public static void main(String[] args) {
    verify(args);
    //get client and do something
    .....
    // some more code here....
    ........
    // and then 
    process(clientoptions);
  }
}
  

Как вы пишете тест в Junit, а затем отправляете разные аргументы командной строки.

Спасибо

Ответ №1:

Просто!

 public class MyClassTest {

    @Test
    public void shouldVerifyParameters() {
        MyClass.main(new String[]{"param1", "param2"});
    }

}
  

Однако для простоты тестирования рассмотрите возможность рефакторинга MyClass в MyClassMain и MyClass где первый только анализирует и проверяет аргументы командной строки и вызывает последний класс с. clientoptions

Таким образом, вы не нарушаете принцип единой ответственности и можете использовать бизнес-логику вне main , например, в сервлете или на мобильном устройстве. Кроме того … тестирование проще.

Комментарии:

1. Если процесс (clientoptions) возвращает логическое значение, указывающее состояние ошибки, то как я могу использовать метод assertTrue для проверки результата. Основной метод возвращает void . Спасибо.

2. Прежде всего, если вы перейдете к рефакторингу, который я предложил, вы можете протестировать process() напрямую. Во-вторых, возврат false для указания ошибки — это плохой дизайн, вместо этого используйте исключения.