使用JUnit测试println输出

问题描述 投票:0回答:1

我正在测试一个简单的helloWorld类。

package Codewars;

public class HelloWorld {

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

}

而且我有一个如下的测试类(基于answer ::

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 [email protected]/org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
    at [email protected]/org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
    ...

似乎字符串是相同的,但仍然抛出错误?

先谢谢您。

java junit5
1个回答
0
投票

请确保您的系统上的行分隔符等于\n在Windows上不是这种情况。

或者,修改测试以考虑系统特定​​的分隔符

assertEquals("Hello World" + System.lineSeparator(), outContent.toString());
© www.soinside.com 2019 - 2024. All rights reserved.