Тест JUnit для System.out.println () - PullRequest
326 голосов
/ 13 июля 2009

Мне нужно написать тесты JUnit для старого приложения, которое плохо спроектировано и записывает много сообщений об ошибках в стандартный вывод. Когда метод getResponse(String request) ведет себя правильно, он возвращает ответ XML:

@BeforeClass
public static void setUpClass() throws Exception {
    Properties queries = loadPropertiesFile("requests.properties");
    Properties responses = loadPropertiesFile("responses.properties");
    instance = new ResponseGenerator(queries, responses);
}

@Test
public void testGetResponse() {
    String request = "<some>request</some>";
    String expResult = "<some>response</some>";
    String result = instance.getResponse(request);
    assertEquals(expResult, result);
}

Но когда он получает некорректный XML или не понимает запрос, он возвращает null и записывает некоторые данные в стандартный вывод.

Есть ли способ подтвердить вывод консоли в JUnit? Чтобы ловить случаи как:

System.out.println("match found: " + strExpr);
System.out.println("xml not well formed: " + e.getMessage());

Ответы [ 12 ]

0 голосов
/ 04 мая 2017

для выхода

@Test
void it_prints_out() {

    PrintStream save_out=System.out;final ByteArrayOutputStream out = new ByteArrayOutputStream();System.setOut(new PrintStream(out));

    System.out.println("Hello World!");
    assertEquals("Hello World!\r\n", out.toString());

    System.setOut(save_out);
}

для ошибки

@Test
void it_prints_err() {

    PrintStream save_err=System.err;final ByteArrayOutputStream err= new ByteArrayOutputStream();System.setErr(new PrintStream(err));

    System.err.println("Hello World!");
    assertEquals("Hello World!\r\n", err.toString());

    System.setErr(save_err);
}
0 голосов
/ 19 июля 2016

Вы не можете напрямую печатать, используя system.out.println или logger api при использовании JUnit . Но если вы хотите проверить какие-либо значения, вы можете просто использовать

Assert.assertEquals("value", str);

Будет выдано сообщение об ошибке ниже:

java.lang.AssertionError: expected [21.92] but found [value]

Ваше значение должно быть 21,92, теперь, если вы будете тестировать, используя это значение, как показано ниже, ваш тестовый пример пройдет.

 Assert.assertEquals(21.92, str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...