Тестирование вывода в консоль JUnit5

Пишу Unit тесты для приложения. Возникла необходимость написать тест для метода removeTask(filename, taskId). Ожидаемым поведением при некорректном id является вывод в консоль System.out.println("Неверный номер задачи."). Проверяю это в тесте следующим образом. Перед каждым тестом выполняется следующий фрагмент кода:

@BeforeEach
public void setUpStreams() {
    System.setOut(new PrintStream(output));
}

@BeforeEach
public void createTestList() throws IOException {
    String filepath = "testfiles/test.json";
    String taskName = "task1";
    String taskDescription = "This is the first task";
    WorkWithJson.createTaskList(filepath, taskName, taskDescription);
}

Задается поток вывода

protected final ByteArrayOutputStream output = new ByteArrayOutputStream();

и создается новый список с одним элементом, его taskId = 1. Сам код теста для некорректного id:

@org.junit.jupiter.api.Test
void removeTaskIncorrectId() {
    String filepath, expResult, actResult;
    filepath = "testfiles/test.json";
    int taskId = 0;

    expResult = "Неверный номер задачи.\n";

    WorkWithJson.removeTask(filepath, taskId);
    actResult = output.toString();

    assertEquals(expResult, actResult);
}

Проблема в следующем. При прохождении теста возникает AssertionFailedError, указано, что Contents have differences only in line separators (см. скриншот). Не могу понять, как исправить эту проблему.

введите сюда описание изображения


Ответы (2 шт):

Автор решения: IlshatIbrahimov

Решил проблему следующим образом – убрал из строк сепараторы, сравнивал без них:

expResult = expResult.replaceAll("\n", "").replaceAll("\r", "");
actResult = actResult.replaceAll("\n", "").replaceAll("\r", "");

Теперь тест работает корректно. Вопрос решен.

→ Ссылка
Автор решения: Sergey Zh.

Как вариант, используя JUnit5 и Assertj, можно сравнивать строки без учёта line separators (\r, \n, \r\n)

import static org.assertj.core.api.Assertions.assertThat;

...

assertThat(resultString).isEqualToIgnoringWhitespace(expectedString);
→ Ссылка