繁体   English   中英

为什么在我的String值之后有括号?

[英]Why are there brackets after my String's value?

我有这样的测试:

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:assertEquals(String,String)可靠吗? 使String成为一个Object引用,但如果是这种情况,括号只是暗示Object ,仍然真的对这个新行感到困惑。

JUnit assertEquals方法在发生差异的字符串部分周围放置方括号,以帮助突出显示问题。 (使用assertEquals("abcde", "acedc")或类似的东西来看一个更直观的例子。)

在这种情况下,它表明一个字符串后面没有任何内容,而另一个字符串在它的末尾有一个换行符。

Files.write文档说明:

每行都是一个char序列,并按顺序写入文件,每行由平台的行分隔符终止,由系统属性line.separator定义。

括号用于突出字符串不同的位置。

在您的情况下,它会在实际结果的末尾突出显示意外的换行符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM