Тестирование вывода println с помощью JUnit - PullRequest
0 голосов
/ 21 февраля 2020

Я тестирую простой класс helloWorld.

package Codewars;

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }

}

И у меня есть тестовый класс следующим образом (на основе ответа ):

import static org.junit.jupiter.api.Assertions.*;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class helloWorldTest {

    private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
    private final PrintStream originalOut = System.out;

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

    @AfterEach
    public void restoreStreams() {
        System.setOut(originalOut);
    }

    @Test
    void test() {
        HelloWorld.main(null);
        assertEquals("Hello World\n", outContent.toString());
    }

}

Это приводит к сбою с сообщением об ошибке следующим образом:

org.opentest4j.AssertionFailedError: expected: <Hello World
> but was: <Hello World
>
    at org.junit.jupiter.api@5.5.1/org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
    at org.junit.jupiter.api@5.5.1/org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
    ...

Кажется, что строки одинаковы, и все равно ошибка выдается?

Заранее спасибо.

1 Ответ

3 голосов
/ 21 февраля 2020

Убедитесь, что в вашей системе разделитель строк равен \n. Это не относится к Windows.

. Чтобы исправить тест, измените его, чтобы учитывать системный спецификатор c с учетом

assertEquals("Hello World" + System.lineSeparator(), outContent.toString());
...