gpt4 book ai didi

java - JUnit 测试未能测试 system.out.println 结果

转载 作者:行者123 更新时间:2023-11-30 05:42:49 24 4
gpt4 key购买 nike

我有一个简单的函数 countUpDown(0, 3) ,需要打印一些结果,如下所示:0,1,2,3,2,1,0

  class CountNumP2{
public void countUpDown(int start, int end) {
System.out.println(start);
if (start >= end) {
return;
}
countUpDown(start + 1, end);
System.out.println(start);
}
}

我的函数应该可以正常工作。但是,当我进行 JUnit 测试时,它失败了,如下所示:

import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

import org.junit.Before;
import org.junit.Test;

public class CountNumP2Test {

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();

@Before
public void setUpStreams() {
System.setOut(new PrintStream(outContent));
}

@Test
public void test() {
CountNumP2 cn = new CountNumP2();
cn.countUpDown(0, 1);
String output = 0 + "\n" + 1 + "\n" + 0;
assertEquals(output , outContent.toString());
}

}

我认为我的测试应该通过,有人知道问题所在吗?非常感谢

最佳答案

System.out.println 将在您传递的值后面添加一个换行符“\n”到字符串中。 System.out.print不添加换行符

正如 jUnit 报告的那样,测试失败,因为预期的字符串(测试中的字符串)末尾没有像实际字符串(outContent 中的字符串)那样的换行符。

我不确定您的代码是否正确,您可以修改为使用 print 而不是 println 但随后以下测试将无法通过:

@Test
public void testMoreThenOneOff() {
CountNumP2 cn = new CountNumP2();
cn.countUpDown(0, 2);
String output = "0\n1\n2\n1\n0";
assertEquals(output , outContent.toString());
}

确实取决于您想要完成的任务,但在 outContent.toString() 的结果上设置一些断点应该是有益的。

关于java - JUnit 测试未能测试 system.out.println 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369751/

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