【发布时间】:2020-04-25 04:10:00
【问题描述】:
我们为 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 在这两种情况下都是有效的,并且代表相同的东西。我也意识到你不应该编写依赖于 XML 中命名空间顺序的代码。
问题
- 测试 XMLSerializer 输出的正确方法是 检查输出文本有错吗?
- 为什么 XMLSerializer 会以不同的顺序返回命名空间?
【问题讨论】:
标签: c# unit-testing teamcity xml-namespaces xmlserializer