Я пытаюсь записать модульный тест на часть кода, который генерирует большую сумму текста. Я столкнулся с проблемой, где "ожидаемые" и "фактические" строки, кажется, равны, но Утверждают. Броски AreEqual, и и оператор равенства и Equals()
возвратите false. Результат GetHashCode()
отличается для обоих значений также.
Однако помещение обеих строк в текстовые файлы и сравнение с DiffMerge говорят мне, что они - то же.
Кроме того, использование Encoding.ASCII.GetBytes()
на обоих значениях и затем использовании SequenceEquals
сравнить получающиеся массивы байтов возвращает true.
Значения составляют 34 КБ каждый, таким образом, я удержу помещать их здесь на данный момент. Какие-либо идеи? Я полностью озадачен.
Какие типы кодировки файлов вы передаете в DiffMerge? Если у вас есть символы, которые не соответствуют типу кодировки, то есть вероятность, что они не будут отображаться в DiffMerge.
Создаваемая строка и ожидаемый результат, вероятно, имеют разные кодировки символов. Когда вы делаете ASCII. GetBytes
, вы конвертируете все в ASCII. Таким образом, ваши строки преобразуются в ASCII и равны с точки зрения набора символов ASCII. Тем не менее, они все еще могут быть неравными в других наборах символов (и все равно «выглядеть» так же для вас).
Кроме того, попробуйте выполнить string.Compare(str1, str2, StringComparison.XXXX)
и сообщите нам, что произойдет.
Прокрутите char
по char
и найдите, что, по его мнению, отличается? Тот факт, что запись его на диск и сравнение ASCII / текста говорит мне, что это, вероятно, связано либо с возвратом каретки / переводом строки (что каким-то образом нормализуется во время сохранения), либо с каким-то символом, отличным от ASCII (возможно, с высоким unicode пробел), который будет удален при сохранении как ASCII.