我正在测试一个简单的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)
...
似乎字符串是相同的,但仍然抛出错误?
先谢谢您。
请确保您的系统上的行分隔符等于\n
在Windows上不是这种情况。
或者,修改测试以考虑系统特定的分隔符
assertEquals("Hello World" + System.lineSeparator(), outContent.toString());