5

我正在尝试为生成大量文本的一段代码编写单元测试。我遇到了一个问题,“预期”和“实际”字符串似乎相等,但 Assert.AreEqual 抛出,并且相等运算符和Equals()返回 false。两个值的结果GetHashCode()也不同。

但是,将两个字符串都放入文本文件并与 DiffMerge 进行比较告诉我它们是相同的。

此外,使用Encoding.ASCII.GetBytes()两个值,然后使用SequenceEquals 比较结果字节数组返回 true。

每个值都是 34KB,所以我暂时不把它们放在这里。有任何想法吗?我完全被难住了。

4

2 回答 2

10

循环通过charchar找到它认为不同的地方?将其写入磁盘并比较 ASCII / 文本的事实告诉我,它可能与回车/换行相关(在保存过程中以某种方式标准化),或者与某些非 ASCII 字符有关(可能是高- unicode 空格),保存为 ASCII 时将被剥离。

于 2010-04-01T03:52:49.080 回答
5

您输入 DiffMerge 的文件的编码类型是什么?如果您的字符与编码类型不匹配,则它们可能不会出现在 DiffMerge 中。

正在生成的字符串和预期结果可能具有不同的字符编码。当你在做的时候ASCII.GetBytes,你正在把所有东西都转换成 ASCII。因此,您的字符串正在转换为 ASCII 并且就 ASCII 字符集而言是相等的。但是,它们在其他字符集中仍然可能不相等(并且对您来说仍然“看起来”相同)。

另外,尝试做一个string.Compare(str1, str2, StringComparison.XXXX),让我们知道会发生什么。

于 2010-04-01T03:55:55.033 回答