簡體   English   中英

用於測試 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());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM