测试 system.out.println 结果的 JUnit 测试失败
JUnit test failed for testing system.out.println result
我有一个简单的函数 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() 的结果上设置一些断点应该是有益的。
您尝试断言的预期输出字符串应该是
0\n1\n0\n
因为有一个println。
更正后的单元测试方法应如下所示。
@Test
public void test() {
CountNumP2 cn = new CountNumP2();
cn.countUpDown(0, 1);
String output = "0\n1\n0\n";
Assert.assertEquals(output , outContent.toString());
}
我有一个简单的函数 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() 的结果上设置一些断点应该是有益的。
您尝试断言的预期输出字符串应该是
0\n1\n0\n
因为有一个println。
更正后的单元测试方法应如下所示。
@Test
public void test() {
CountNumP2 cn = new CountNumP2();
cn.countUpDown(0, 1);
String output = "0\n1\n0\n";
Assert.assertEquals(output , outContent.toString());
}