使用 JUnit 测试 println 输出
Testing println output with JUnit
我正在测试一个简单的 helloWorld class。
package Codewars;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
我有一个测试 class 如下(基于 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());
我正在测试一个简单的 helloWorld class。
package Codewars;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
我有一个测试 class 如下(基于 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());