我正在测试一个简单的 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 已采纳

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

要修复测试,请修改它以考虑系统特定​​的分隔符

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

  ask by Vintux translate from so

未解决问题?本站智能推荐:

1回复

如何使用Junit5测试SpringBoot服务CatchBlock?

在我的业务逻辑中,我没有任何异常情况,不确定如何在 sprint boot Service 类中测试 catch 块。 大多数场景都是在控制器级别处理的。 但是对于声纳覆盖,我也需要在我的服务中覆盖捕获块。 我的示例代码就像 我的业务逻辑是否应该有任何失败场景来测试,或者我们可以选择模拟自定义虚拟异
1回复

如何使用Junit5在junit4中创建测试套件

因为我们从junit4升级到junit5单元测试的目的,我也没能找到解决方案,创建一个测试套件junit5像junit4:下面是我们的junit4套件类: 周围搜索后,我试过代码如下: 在搜索的解决方案,其中大多数是提供使用相同的测试套件使用老式API来运行它的解决方案,但我是什么追求的是在JUni
2回复

JUnit测试中的SystemOutRule未捕获标准输出

我想测试ClientDtoServiceConsoleImpl.displayAllClientsInfo()方法。 它只是将一些数据打印到控制台。 我试图通过SystemOutRule在单元测试中捕获输出,但得到了空String output 。 为什么? displayAllClientsI
2回复

JUnit测试void方法(输出-输入依赖性)

我在尝试为一种特定方法编写 JUnit 测试时遇到了一个问题。 我搜索了可能的解决方案,但其中许多没有帮助,因为输出不依赖于输入。 任何帮助将非常感激。 我的类方法如下所示: 如何为其编写JUnit测试,Robot类能否以某种方式解决问题?
1回复

如何查看在使用Antjunitlauncher和junitreport任务运行的junit5测试期间生成的所有log4j2输出?

我正在运行许多测试类,它们混合使用System.out.println(...)和 Log4j2 log.info(...)日志记录。 我可以在 HTML 报告中看到要运行的第一个测试类的所有日志,但随后的测试似乎只保留了System.out.println(...)直接使用。 如何保留报告中的所有
2回复

在JUnit/Mockito测试中使用模拟对象

我有一个JUnit测试,内容为 当我在setUp中调用new时,我有threadPoolExtendedExecutor=null 。 我想插入一些模拟的threadPoolExtendedExecutor因此,在调用其方法时我没有NullPointer问题(因此,此时简单的接口模拟就足够
1回复

如何使用JUnit5测试变量是否存在?

我想测试一下 JUnit 测试中是否存在变量。 我有一个叫做动物的类,它是一个抽象类。 我想测试一下变量 age 是否存在,以及它是否是私有的和最终的。 我将如何在 Junit 测试中做到这一点?
1回复

如何使用JUnit5测试抛出NullPointerException的方法

如何使用 JUnit 5 测试抛出 NullPointerException 的方法。但我在方法中捕获了此异常,因此测试以错误结束:“预期抛出 java.lang.NullPointerException,但未抛出任何内容。”class MyClass { void myMethod() {