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 に答える