【问题标题】:Ignore attributes' order when comparing xml with ApprovalTests将 xml 与 ApprovalTests 进行比较时忽略属性的顺序
【发布时间】:2016-10-06 20:17:52
【问题描述】:

我正在尝试 Approvals.Verify xml,但问题是属性的顺序。在少数元素中,它们在我的计算机和 Jenkins 中的顺序不同。从其他question 我发现更改类中属性的顺序。这有点奏效:它改变了属性的顺序,但现在詹金斯的顺序是它曾经在我的计算机中的顺序,反之亦然。因此,更改属性在类中的顺序没有帮助。

有没有办法使用 ApprovalTests 来忽略 xml 属性的顺序?或者我怎么能说出 xml 序列化中属性的确切顺序?还是其他提示?

【问题讨论】:

  • 听起来你需要和 Jenkins 进行一次安静但非常激烈的讨论,不要扰乱他的属性。事实上,悄悄地处理掉詹金斯本人可能是你最好的选择。但是,如果您可以提供足够的代码来重现该问题,那可能是解决您的问题的另一种方法。
  • 根据XML Standard Section 3.1开始标签或空元素标签中属性规范的顺序并不重要。 所以如果 ApprovalTests 没有忽略属性顺序,那么这是 ApprovalTests 中的一个错误。为了比较 XNode.DeepEquals() 忽略属性顺序,所以也许你可以使用它。
  • 话虽如此,从reference source 看来,XmlApprovals.VerifyOrderedXml() 试图规范化属性的顺序。这是您使用的方法吗?如果没有,你能提供一个minimal reproducible example吗?

标签: c# xml xmlserializer approval-tests


【解决方案1】:

根据 XML 标准第 3.1 节,开始标记或空元素标记中属性规范的顺序并不重要。因此 XML 属性的更改不应触发单元测试失败.

而且,从reference source 看来,XmlApprovals.VerifyOrderedXml() 方法似乎通过内部调用 XmlUtils.FormatXmlWithOrderedAttributes() 对所有属性进行递归排序来规范化验证之前的属性顺序。因此,这种方法应该可以满足您的需求。

【讨论】:

    猜你喜欢
    • 2016-11-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2013-01-31
    相关资源
    最近更新 更多