2016-05-22 4 views
4

При работе:System.out.print не выводится на консоль при работе с JUnit

public static void main(String... args) throws InterruptedException { 
    while (true) { 
     System.out.print("."); 
     Thread.sleep(200); 
    } 
} 

vs. при работе такой же код с JUnit:

@Test 
public void test() throws Exception { 
    while (true) { 
     System.out.print("."); 
     Thread.sleep(200); 
    } 
} 

Существует различное поведение:
для основного() - выход отображается, как ожидалось, по мере запуска процесса («.» -> «..» -> «...»)

однако для JUnit при работе с одним и тем же фрагментом код, При запуске процесса не выводится вывод. Он вымывается только при выходе из теста.

Почему это происходит? Есть ли способ обходного пути, если мне нужен статус, который будет отображаться на консоли во время тестового прогона?

Мне нужно печатать на той же строке, поэтому использование println не подходит.

+0

Распечатать новую строку. –

+0

с println он работает, но мне он нужен без новой строки, хотя ... – Lika

+1

Почему? Тесты Junit не должны нуждаться в человеческом взаимодействии. –

ответ

3

Существует множество способов запуска тестов JUnit (изнутри IDE, изнутри системы сборки, такой как Maven, или из командной строки, которая напрямую использует библиотеку JUnit). Похоже, что способ, которым вы его используете, использует стандартный вывод, который не очищается на каждом выходе. (Это, вероятно, преднамеренно, так как часто тесты проводятся в пакетном режиме с использованием системы непрерывной интеграции, и журналы, рассмотренные впоследствии, поэтому не очистка от каждой записи может повысить производительность.)

Но, если вам нужно сбросить буфер явно, попробуйте использовать System.out.flush(); после каждого вызова .print.

Другой вариант, в зависимости от того, что вы на самом деле хотите сделать, может состоять в использовании более полнофункциональной системы ведения журнала, чем встроенный поток System.out.

+1

Спасибо за объяснение, это, по-видимому, причина, но явное использование System.out.flush(); после каждого .print (".") также не выводит вывод (при запуске из IntelliJ IDE). println ("."), с другой стороны, отображает вывод ... – Lika

+0

У меня также возникает эта проблема при работе с муравьем – bikashg