Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试system.out.println结果的JUnit测试失败_Java_Junit4 - Fatal编程技术网

Java 测试system.out.println结果的JUnit测试失败

Java 测试system.out.println结果的JUnit测试失败,java,junit4,Java,Junit4,我有一个简单的函数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; } coun

我有一个简单的函数
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());
    }

嗨,丹,非常感谢你。一旦我改为打印。这很有效,希利昂,非常感谢你。我在我的代码中发现,我应该将代码从println修改为print