Это сводило меня с ума в течение нескольких дней, и я, наконец, решил проблему с простой воспроизводимой проблемой.
У меня есть тестовый проект NUnit, это .NET Core 2.1. Он ссылается на библиотеку (назовем ее «Core»), которая является .NET Standard 2.0.
В моем тестовом проекте:
[TestCase(true, false)]
[TestCase(false, false)]
[TestCase(false, true)]
public void ShouldStartWith(bool useInternal, bool passStartsWith)
{
var result = useInternal ? StartsWithQ("¿Que?") : StringUtilities.StartsWithQ("¿Que?", passStartsWith ? "¿" : null);
result.ShouldBeTrue();
}
public static bool StartsWithQ(string s)
{
return _q.Any(q => s.StartsWith(q, StringComparison.InvariantCultureIgnoreCase));
}
и в проекте Core
в классе StringUtilities
:
public static bool StartsWithQ(string s, string startsWith = null)
{
return startsWith == null
? _q.Any(q => s.StartsWith(q, StringComparison.InvariantCultureIgnoreCase))
: s.StartsWith(startsWith, StringComparison.InvariantCultureIgnoreCase);
}
Оба класса определили список специальных символов:
private static readonly List<string> _q = new List<string>
{
"¡",
"¿"
};
В среде Windows все тестовые примеры проходят успешно. Но когда те же тесты выполняются в среде Linux, тестовый пример ShouldStartWith(False,False)
терпит неудачу!
Это означает, что когда все работает в тестовом проекте, сравнение строк работает правильно, и даже если вы передаете специальные символы методу StringUtilities
, сравнение работает. Но когда вы сравниваете со строкой, которая была скомпилирована в проекте Core, специальные символы больше не эквивалентны!
Кто-нибудь знает, почему это? Это ошибка .NET? Как это обойти?
file
показывает как тип файла как для модульного теста, так и для реализации в Linux? На моей машине это отображается какProgram.cs: C++ source, UTF-8 Unicode text
, и тест проходит. - person omajid   schedule 16.07.2018file
- это программа, которая угадывает кодировку. Она может оказаться полезной, а может и не оказаться полезной для демонстрации того, что файл не имеет кодировки, которая, по вашему мнению, есть. Требуется некоторая интерпретация.) - person Tom Blodget   schedule 17.07.2018Test.dll: PE32+ executable (console) x86-64 Mono/.Net assembly, for MS Windows
Core.dll: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows
- person Shaul Behr   schedule 17.07.2018\udddd
) для этих символов, отличных от ascii? Помогает ли это результатам теста? - person omajid   schedule 17.07.2018