解决Windows下Spring in Action书中示例测试代码不成功的问题
在学习Spring in Action第二章的时候遇到一个问题,其中的测试代码总是报错:
org.junit.ComparisonFailure: expected:<... Band by The Beatles[]
> but was:<... Band by The Beatles[
]
>
前者对应于"Playing Sgt, Pepper’s Lonely Hearts Club Band by The Beatles\n",
后者对应于System.out.println(“Playing Sgt, Pepper’s Lonely Hearts Club Band by The Beatles”).
可以看出两者的区别在于最后一点点,所以我怀疑是system.out.println()方法与system.out.print("\n")不对等。于是我将system.out.println("…")改成了system.out.print("…"),同时将"Playing Sgt, Pepper’s Lonely Hearts Club Band by The Beatles\n"中的”\n“去掉。结果测试正常不再报错了。所以我更加肯定是因为system.out.println()方法与system.out.print("\n")不对等。
上网搜索发现一个很有趣的事情:计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<回车><换行>”,即“ \r\n”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
长知识了!!!
所以说:
Windows下System.out.println()等于System.out.print("\r\n")
Unix和Mac 下System.out.println()等于System.out.print("\n")
还有一个问题
测试代码中的StandardOutPutStreamLog类所需要的依赖包如下:
<dependency>
<groupId>com.github.stefanbirkner</groupId>
<artifactId>system-rules</artifactId>
<version>1.4.0</version>
</dependency>
本文探讨了解决在Windows环境下使用SpringinAction一书中的示例代码时遇到的测试失败问题,详细分析了system.out.println()方法在不同操作系统中的行为差异,并提供了修正方案。

7670

被折叠的 条评论
为什么被折叠?



