Мы добавили устаревшее решение для TeamCity. Один из модульных тестов теперь терпит неудачу, несмотря на то, что он проходит локально.XMLSerializer производит различные результаты на TeamCity
В модульном тесте проверяется, что фактическая строка вывода из XmlSerializer соответствует ожиданиям.
string expectedXmlText = File.ReadAllText("TestFile.xml");
objectToSerialize = ...;
string actual = UtilsClass.SerializeObject(objectToSerialize);
Assert.That(xmlText, Is.EqualTo(expectedXmlText));
В TeamCity он терпит неудачу со следующим сообщением:
Test(s) failed. String lengths are both 476. Strings differ at index 59.
Expected: "..."utf-16"?>\r\n<Envelope xmlns:xsi="http://www.w3.org/2001/XM..."
But was: "..."utf-16"?>\r\n<Envelope xmlns:xsd="http://www.w3.org/2001/XM..."
Обратите внимание, что пространство имен различаются, одна начинается с XSi и один начинается с XSD.
Теперь я понимаю, что XML действителен в обоих случаях, когда adn представляет одно и то же. Я также понимаю, что вы не должны писать код, который опирается на порядок пространств имен в XML.
Вопросы
- Что такое правильный способ проверить выход на XMLSerializer, является неправильно проверить выходной текст?
- Почему XMLSerializer возвращает пространства имен в другом порядке?