0

1 つではなく 2 つのプロパティに基づいて、NUnit でリストの順序をテストする必要があります。

スニペット コード (動作中):

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"));

スニペット コード (私が欲しいもの - 動作しない):

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"));
4

2 に答える 2

2

明らかに、NUnit には構文要素がないことはわかっていますが、複数回適用するThenByことを望んでいました。Byどちらの機能も使用できず、CollectionOrderedConstraint は単一のプロパティ名のみをサポートします。どちらのアプローチも NUnit で実装するのはそれほど難しくないため、問題を提出してその機能をリクエストすることを検討する必要があります。

今のところ、それは不可能です。タプルの予期されるリストを正しい順序で作成し、2 つのリストが等しいかどうかをテストするという回避策を検討する必要があります。

于 2016-06-07T14:01:40.977 に答える
1

別のオプションとして、shouldly フレームワークを見て、以下のようなことを行うことができます

    [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);
    }
于 2016-06-08T08:49:50.833 に答える