gpt4 book ai didi

java - 使用 JUnit 测试 println 输出

转载 作者:行者123 更新时间:2023-12-01 19:29:08 26 4
gpt4 key购买 nike

我正在测试一个简单的 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 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)
...

看起来字符串是相同的,但仍然抛出错误?

提前谢谢您。

最佳答案

确保您的行分隔符等于系统上的 \n。Windows 上并非如此。

要修复该测试,请对其进行修改以考虑系统特定​​的分隔符

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

关于java - 使用 JUnit 测试 println 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60336350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com