2014-09-26 124 views
1

我有一些方法,諸如Add(int n)AddAt(int n, int index)一個簡單的數組類等JUnit進行測試System.err.print()

的addAt方法調用從超類

public void addAt(int n, int index) { 
    if (checkIndex(index, size + 1)){ 
     ... 
    } 
} 

另一種方法,檢查插入的索引是否出界,如果是這樣,則超類方法向控制檯輸出錯誤消息。

我應該如何測試,如果郵件打印?我正在使用JUnit4.12-beta

+0

可能重複[?我們是否應該單元測試的控制檯輸出(http://stackoverflow.com/questions/15175175/should-we-單元測試控制檯輸出) – Joe 2014-09-26 12:22:37

+0

是的我已經看到了,但答案是取決於您的代碼 – 2014-09-26 14:28:25

回答

4
@Test 
public void testPrint() { 
    ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 
    //redirect the System-output (normaly the console) to a variable 
    System.setErr(new PrintStream(outContent)); 

    //call your method here 

    //check if your error message is in the output variable 
    assertEquals("your output", outContent.toString()); 
} 
+0

在這裏你的意思是outContent變量應該流的東西打印在控制檯上?我已經嘗試過,但outContent始終爲空 – 2014-09-26 14:24:22

+0

@AmirHM:對,修復了我的答案。使用'setErr'而不是'setOut',因爲'err'和'out'是不同的流。現在這應該工作。 – Simulant 2014-09-26 14:50:08

+0

感謝它的工作 – 2014-09-26 15:52:51