我們爲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會以不同的順序返回命名空間?