2012-11-03 231 views
2

即使兩個字符串都相同,assertEquals()仍然失敗......有人可以幫我弄清楚爲什麼?assertEquals()失敗的原因

public void testSet() 
{ 
    ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 

    System.setOut(new PrintStream(outContent)); 

    instance.get(); 

    String output = outContent.toString(); 
    String input="i=1\r\n"; 
    assertEquals(input,output); 
} 

get() 
{ 
    int i=1; 
    System.out.println("i="+i); 
} 
+3

'println'增加了一個'」 \ n'',methinks。檢查'output.length()'。 –

+0

@DanielFischer我試着添加'\ n'來輸入仍然assertEquals()失敗..現在input.length()= 4和output.length = 5 ...但我沒有得到它爲什麼發生的原因 – user1778824

+0

你在Windows上嗎?那麼你可能需要'「\ r \ n」'。或者,更好地使用'print'而不是'println',那麼它應該獨立於平臺工作。 –

回答

4

你在你的打印語句在get()方法,其在輸出緩衝區追加\r\n使用newline。這樣你就得到了`output =「i = 1 \ r \ n」,它不等於「i = 1」。

使用print without newline i.e. print()如下:

System.out.print("i="+i); 

如果你不想使用print()方法然後截斷從輸出,如下\r\n

String output = outContent.toString(); 
    output = output.replaceAll("\r\n", ""); 
    String input="i=1"; 
    assertEquals(input,output); 
+0

但我想用System.out.println()有一些方法可以通過 – user1778824

+0

@ user1778824:是的,截斷它。在答案中增加了一個示例代碼。 –

+1

@ user1778824因此,在測試之前,從字符串中刪除換行符,或者在測試中包含換行符序列。您可以從java.lang.System獲取平臺換行序列。 – EJP