0

我正在开发一个集成测试应用程序,这就是我在测试用例中所做的事情,我读取了一个存储在 cvs 中的测试输入文件,将其写入文件系统中的一个文件,应用程序轮询目录文件,处理它并创建输出文件,然后我轮询输出文件的目录,如果两个文件内容相等,则测试用例成功(我正在将输入文件和输出文件读入字符串并进行比较) .

问题是这个测试用例在 linux 系统中运行时失败,原因是存储在 cvs 中的文件是从包含 CRLF 作为行终止符的 Windows 系统检入的,而生成的输出文件的行终止符为CR,现在当我阅读这些文件并逐个字符比较它们时,它们不匹配。

任何人都可以在这里帮忙。

4

4 回答 4

3

您可以尝试按行比较它们。例如,为此使用FileUtils 。

List<String> file1 = FileUtils.readLines(...);
List<String> file2 = FileUtils.readLines(...);
return file1.equals(file2);
于 2012-01-06T09:15:47.267 回答
3

您可以使用检查主机操作系统的行分隔符System.getProperty("line.separator")

由于您使用的是文本文件,因此您还可以逐行比较文件内容。检查LineNumberReader.readLine()一下。

于 2012-01-06T09:22:07.053 回答
0

您可以从下载的文件中删除所有 '\r' 字符吗?或者用 "\n" Linux 替换 "\r\n" Windows 字符串。也要注意 Mac 案例:行尾可以用“\r”标识。

于 2012-01-06T09:13:35.870 回答
0

当您签入文件时,您可以告诉 CVS 它是一个二进制文件(cvs add -kb),然后 CVS 将不会在此过程中转换行尾。

这也有其他缺点,例如没有适当的差异,但如果你真的逐个字符地测试,我想你不需要那个。

请注意,添加文件时必须指定-kb,以后不能更改。

于 2012-01-06T09:32:43.867 回答