代码之家  ›  专栏  ›  技术社区  ›  Frank Schwieterman

在测试期间实现icomparable的xattribute,但在live时不实现

  •  0
  • Frank Schwieterman  · 技术社区  · 14 年前

    下面有一些代码在集成环境中抛出异常,但在我的单元测试中没有。基本上,我是按属性值对一些xml元素(linq-2-sql xelement)进行排序。所有节点都定义了属性。

    IEnumerable<XElement> elements = ...; // elementes are of the form<recipe name="something">
    
    elements.OrderBy(e => e.Attribute("name"))
    

    引发的异常是“至少有一个对象必须实现IComparable”。代码可以固定为在以下任一情况下工作:

    IEnumerable<XElement> elements = ...; // elementes are of the form<recipe name="something">
    
    elements.OrderBy(e => e.Attribute("name").Value)
    

    但我想知道为什么在调试环境中运行时会抛出异常,而不是从我的单元测试中抛出异常?我担心我的测试库使用的一些实用程序会产生意想不到的副作用,但是我找不到任何东西。我该找什么?

    注意,在测试环境中,elements.first().attribute(“name”)不为空,但elements.first().attribute(“name”)as icomparable为空,因此在这两种情况下,xattribute都不实现icomparable。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Darin Dimitrov    14 年前

    不管环境如何 XAttribute 不执行 IComparable 所以你已经通过使用 .Value 是的。现在,如果您对这个异常发生的原因感到不安,这里有一个测试用例:在您的单元测试中,有一个元素 name 空属性:

    var elements = new[] { 
        new XElement("el1", new XAttribute("name", "foo")),
        new XElement("el1", new XAttribute("name", ""))
    };
    
    // This will throw the exception you are observing in your unit test
    var orderedElements = elements.OrderBy(x => x.Attribute("name")).ToArray();
    
    推荐文章