Как я могу протестировать Java-приложение командной строки из JUnit без насмешек?

#java #testing #junit #junit5

Вопрос:

Это мой код:

 public class Foo {  public static void main(String... args) {  // reconfigure global logging  // do something else  } }  

Как я могу проверить это с помощью JUnit (или, может быть, нет) без насмешек? Я хочу, чтобы эта main() функция делала именно то, что она делала бы обычно, а затем перехватывала вывод консоли для утверждений. Конечно, не мешая другим тестам с реконфигурацией глобального ведения журнала, как упоминалось выше. В принципе, мне нужна новая JVM, чтобы запустить ее.

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

1. Сделай именно это.

2. что вы имеете в виду: «перехватить его вывод на консоль»?

3. @Stultuske ну, он что-то напечатает на консоли, я хочу это получить и передать утверждения JUnit для проверки

Ответ №1:

Вы можете попробовать установить (на самом деле, чтобы издеваться) System.out перед тестом, например:

 public class Foo {  public static void main(String... args) {  System.out.print("Console output");  } }  

Тест:

 @Test public void canPrint() {  ByteArrayOutputStream os = new ByteArrayOutputStream();  System.setOut(new PrintStream(os));   Foo.main();   assertEquals("Console output", os.toString()); }