2017-09-14 87 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

括号是为了突出显示字符串不同的位置。

就你的情况而言,在实际结果的最后突出显示了一个意外的换行符。

相关问题