2016-06-07 17 views
0

Ich möchte NUnit testet eine Liste Reihenfolge, basierend auf zwei Eigenschaften statt einer.Wie prüfe ich Listenaufträge (weitere Eigenschaften) mit NUnit?

Snippet Code (in Betrieb):

var list = new List<Tuple<string, string>> 
{ 
    new Tuple<string, string>("aaaa", "bbbb"), 
    new Tuple<string, string>("bbbb", "aaaa"), 
    new Tuple<string, string>("aaaa", "cccc"), 
    new Tuple<string, string>("cccc", "bbbb") 
}; 
var ordered = list.OrderBy(p => p.Item1).ThenBy(p => p.Item2); 
Assert.That(ordered, Is.Ordered.By("Item1")); 

Snippet-Code (was ich will - nicht funktioniert):

var list = new List<Tuple<string, string>> 
{ 
    new Tuple<string, string>("aaaa", "bbbb"), 
    new Tuple<string, string>("bbbb", "aaaa"), 
    new Tuple<string, string>("aaaa", "cccc"), 
    new Tuple<string, string>("cccc", "bbbb") 
}; 
var ordered = list.OrderBy(p => p.Item1).ThenBy(p => p.Item2); 
Assert.That(ordered, Is.Ordered.By("Item1").ThenBy("Item2")); 
// Below syntax works but does not return expected result 
// Assert.That(ordered, Is.Ordered.By("Item1").By("Item2")); 
+0

tun etwas aussehen könnte, nicht wahr? –

+0

. Dann By ("Item2") in "Assert.That (geordnet, Is.Ordered.By (" Item1 "). ThenBy (" Item2)); " – labilbe

+1

Scheint, Sie müssen Ihre eigene Erweiterung schreiben, um das zu erreichen. – Evk

Antwort

2

Offensichtlich wissen Sie, dass es keine ThenBy Syntaxelement in NUnit, aber hatten gehofft, By mehrmals anzuwenden. Keine Funktion ist verfügbar und die CollectionOrderedConstraint unterstützt nur einen einzelnen Eigenschaftennamen. Es wäre nicht sehr schwierig, beide Ansätze in NUnit zu implementieren. Daher sollten Sie in Erwägung ziehen, ein Problem zu stellen, um diese Funktion anzufordern.

Für jetzt ist es nicht möglich. Sie sollten die Problemumgehung in Betracht ziehen, indem Sie eine erwartete Liste von Tupeln in der richtigen Reihenfolge erstellen und die beiden Listen auf Gleichheit testen.

+0

Konversation geht weiter [hier] (https://github.com/nunit/nunit/issues/1553) – labilbe

1

Als eine weitere Option, die Sie am shouldly Rahmen und wie das, was Arbeit ist unter

[TestMethod] 
    public void GivenAnUnorderListWhenCustomOrderExecutedThenItemsOrderbyItemOneThenByItemTwo() 
    { 
     var expectedOrder = new List<Tuple<string, string>> 
     { 
        new Tuple<string, string>("aaaa", "bbbb"), 
        new Tuple<string, string>("aaaa", "cccc"), 
        new Tuple<string, string>("bbbb", "aaaa"), 
        new Tuple<string, string>("cccc", "bbbb") 
     }; 

     var list = new List<Tuple<string, string>> 
     { 
        new Tuple<string, string>("aaaa", "bbbb"), 
        new Tuple<string, string>("bbbb", "aaaa"), 
        new Tuple<string, string>("aaaa", "cccc"), 
        new Tuple<string, string>("cccc", "bbbb") 
     }; 

     var orderedList = list.OrderBy(p => p.Item1).ThenBy(p => p.Item2); 
     orderedList.ShouldBe(expectedOrder); 
    } 
+0

In meinem echten Fall ist es eine SQL-Abfrage. Ich verwandelte das in ein Tuple für mehr Einfachheit. Daher ist die Verwendung von expectedOrder mit einer SQL-Abfrage schwieriger zu testen. – labilbe