2017-09-14 53 views
1

我有這樣一個測試:爲什麼在我的字符串值後有括號?

String dir = "/foo"; 
String fileName = "hello.txt"; 
String pathString = dir + "/" + fileName; 
String text = "hello world!"; 
MyTask task = new MyTask(); 

FileSystem fs = Jimfs.newFileSystem(Configuration.unix()); 

Path foo = fs.getPath(dir); 
Files.createDirectory(foo); 
Path hello = foo.resolve(fileName); 
Files.write(hello, ImmutableList.of(text), StandardCharsets.UTF_8); 

task.setFileSystem(fs); 
String fileValue = task.readFile(pathString); 

// Doing this just shows "fail whale: hello world!" 
// fail("fail whale: " + fileValue); 

// Failure from here adds brackets 
assertEquals(text, fileValue); 

我得到一個失敗這樣的:

org.junit.ComparisonFailure: expected:<hello world![]> but was:<hello world![ 
]> 

如果我扭轉論據,我可以看到readFile絕對是創造新的生產線,它的不只是我的終端截斷。

我不知道爲什麼JUnit在我的字符串之後顯示括號,而且我更加困惑的是爲什麼會添加一個空格。

readFile很簡單:

public String readFile(String path) { 
    try { 
    return new String(Files.readAllBytes(fs.getPath(path))); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    return ""; 
    } 
} 

Java: Is assertEquals(String, String) reliable?使得String的參考是一個Object,但如果是這樣的話,一個括號只是意味着Object,還是真搞不清楚新線。

+0

'Files.write'在行末寫行結尾(\ n)符號 –

回答

6

JUnit assertEquals方法將方括號放在出現差異的字符串部分的周圍,以幫助突出顯示問題。 (玩弄assertEquals("abcde", "acedc")或希望看到它在一個更直觀的例子。)

在這種情況下,它表明一個字符串有後什麼都沒有,而另一串具有在其末端有一個換行符。

Files.write documentation狀態:

每一行是一個char序列並且被寫入到在序列中的文件與由所述平臺的在線分離器終止每一行,由系統屬性line.separator所定義的。

+0

我可以在3分鐘內接受這個答案。謝謝! –

+0

另外,這很有趣,我第一次使用JUnit,我做了一個字符串錯誤,就像這樣,這使得它看起來像另一件事:P –

2

括號是爲了突出顯示字符串不同的位置。

就你的情況而言,在實際結果的最後突出顯示了一個意外的換行符。

相關問題