0

以下のコードは、統合環境では例外をスローしていますが、単体テストではスローしていません。基本的に、いくつかの XML 要素 (linq-2-sql XElement) を属性値で並べ替えています。すべてのノードに属性が定義されています。

IEnumerable<XElement> elements = ...; // elementes are of the form<recipe name="something">

elements.OrderBy(e => e.Attribute("name"))

スローされる例外は、「少なくとも 1 つのオブジェクトは IComparable を実装する必要があります」です。コードは、次のいずれかの場合で動作するように修正できます。

IEnumerable<XElement> elements = ...; // elementes are of the form<recipe name="something">

elements.OrderBy(e => e.Attribute("name").Value)

しかし、デバッグ環境で実行すると例外がスローされるのに、単体テストからは例外がスローされないのはなぜでしょうか? 私のテスト ライブラリが使用するいくつかのユーティリティに予期しない副作用があるのではないかと心配していますが、何も見つかりません。何を探すべきですか?

テスト環境では、elements.First().Attribute("name") は null ではなく、elements.First().Attribute("name") は IComparable が null であるため、どちらの場合も XAttribute は IComparable を実装しないことに注意してください。 .

4

1 に答える 1

0

環境に関係なく、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();
于 2010-03-25T23:15:17.477 に答える