2010-04-01 24 views
5

我正在尝试为生成大量文本的代码段编写单元测试。我遇到了“期望”和“实际”字符串看起来相同的问题,但Assert.AreEqual抛出,并且等于运算符和Equals()都返回false。 GetHashCode()的结果也是不同的。C#字符串相等运算符返回false,但我很确定它应该是真的......什么?

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

此外,在两个值上使用Encoding.ASCII.GetBytes(),然后使用SequenceEquals比较得到的字节数组返回true。

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

+2

尝试'Encoding.Unicode.GetBytes()' - 相同的行为? – 2010-04-01 03:52:57

+0

什么是string.Equals(yourstring,StringComparison.InvariantCulture)返回? – 2010-04-01 03:54:27

+0

你可以只发布单元测试吗? – 2010-04-01 04:01:00

回答

5

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

正在生成的字符串和预期的结果可能具有不同的字符编码。当你在做ASCII.GetBytes时,你正在将所有东西都转换成ASCII。所以,你的字符串正在被转换成ASCII,并且在ASCII字符集方面是相等的。但是,它们在其他字符集中仍然不相等(仍然“看起来”与你相同)。

此外,请尝试执行string.Compare(str1, str2, StringComparison.XXXX)并让我们知道发生了什么。

+0

可能最好的尝试是'StringComparison.Ordinal'。 – 2010-04-01 04:01:21

+0

是的,这是一个编码问题......错误的文本已从网页上复制下来,并有一些疯狂的引号字符 – 2010-04-01 17:10:13

10

循环通过charchar并找到它认为是不同的?将它写入磁盘并比较ASCII /文本的事实告诉我,它可能是与回车/换行相关的(在保存过程中某种程度上被归一化),或者涉及到某些非ASCII字符(可能是高速缓存) unicode空格),当保存为ASCII时将被删除。

相关问题