Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NUnit检查列表订单(其他属性)?_C#_.net_Unit Testing_Nunit_Nunit 3.0 - Fatal编程技术网

C# 如何使用NUnit检查列表订单(其他属性)?

C# 如何使用NUnit检查列表订单(其他属性)?,c#,.net,unit-testing,nunit,nunit-3.0,C#,.net,Unit Testing,Nunit,Nunit 3.0,我希望NUnit基于两个属性而不是一个属性来测试列表顺序 代码片段(工作): var list=新列表 { 新元组(“aaaa”、“bbbb”), 新元组(“bbbb”、“aaaa”), 新元组(“aaaa”、“cccc”), 新元组(“cccc”、“bbbb”) }; var ordered=list.OrderBy(p=>p.Item1),然后是by(p=>p.Item2); 断言。该(已命令的,是由(“第1项”)命令的); 代码片段(我想要的-不工作): var list=新列表 { 新

我希望NUnit基于两个属性而不是一个属性来测试列表顺序

代码片段(工作):

var list=新列表
{
新元组(“aaaa”、“bbbb”),
新元组(“bbbb”、“aaaa”),
新元组(“aaaa”、“cccc”),
新元组(“cccc”、“bbbb”)
};
var ordered=list.OrderBy(p=>p.Item1),然后是by(p=>p.Item2);
断言。该(已命令的,是由(“第1项”)命令的);
代码片段(我想要的-不工作):

var list=新列表
{
新元组(“aaaa”、“bbbb”),
新元组(“bbbb”、“aaaa”),
新元组(“aaaa”、“cccc”),
新元组(“cccc”、“bbbb”)
};
var ordered=list.OrderBy(p=>p.Item1),然后是by(p=>p.Item2);
断言(被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令;
//下面的语法起作用,但不返回预期结果
//断言(被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令,被命令);

显然,您知道NUnit中没有
ThenBy
语法元素,但我们希望
By
可以多次应用。这两个功能都不可用,CollectionOrderedConstraint仅支持单个属性名称。在NUnt中实现这两种方法并不难,所以你应该考虑提交一个问题来请求这个特性。
现在,这是不可能的。您应该考虑以正确的顺序创建Tuples的预期列表,并使用两个列表来测试相等性。

显然,您知道NNUnE中没有<代码> TyBub/Cuth>语法元素,但希望通过< /代码>多次应用<代码>。这两个功能都不可用,CollectionOrderedConstraint仅支持单个属性名称。在NUnt中实现这两种方法并不难,所以你应该考虑提交一个问题来请求这个特性。


现在,这是不可能的。您应该考虑以正确的顺序创建Tuples的预期列表,并使用两个列表来测试相等性。

< P>作为另一个选项,您可以查看SUBLY框架并执行以下类似的内容:
    [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);
    }
[TestMethod]
当自定义项或DerbyItemOneThenByItemTwo()被执行时,public void givenanorderList
{
var expectedOrder=新列表
{
新元组(“aaaa”、“bbbb”),
新元组(“aaaa”、“cccc”),
新元组(“bbbb”、“aaaa”),
新元组(“cccc”、“bbbb”)
};
变量列表=新列表
{
新元组(“aaaa”、“bbbb”),
新元组(“bbbb”、“aaaa”),
新元组(“aaaa”、“cccc”),
新元组(“cccc”、“bbbb”)
};
var orderedList=list.OrderBy(p=>p.Item1),然后是by(p=>p.Item2);
orderedList.应为(expectedOrder);
}

作为另一个选项,您可以查看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);
    }
[TestMethod]
当自定义项或DerbyItemOneThenByItemTwo()被执行时,public void givenanorderList
{
var expectedOrder=新列表
{
新元组(“aaaa”、“bbbb”),
新元组(“aaaa”、“cccc”),
新元组(“bbbb”、“aaaa”),
新元组(“cccc”、“bbbb”)
};
变量列表=新列表
{
新元组(“aaaa”、“bbbb”),
新元组(“bbbb”、“aaaa”),
新元组(“aaaa”、“cccc”),
新元组(“cccc”、“bbbb”)
};
var orderedList=list.OrderBy(p=>p.Item1),然后是by(p=>p.Item2);
orderedList.应为(expectedOrder);
}

什么不起作用?.ThenBy(“Item2”)在“Assert.That(ordered,Is.ordered.By(“Item1”).ThenBy(“Item2”);”中似乎你必须编写自己的扩展来实现它。什么不起作用?.ThenBy(“Item2”)在“Assert.That(ordered,Is.ordered.By(“Item1”);“似乎你必须编写自己的扩展来实现它。在我的真实案例中,这是一个SQL查询。为了更简单,我将其转换为一个元组。所以使用SQL查询的expectedOrder更难测试。在我的实际情况中,它是一个SQL查询。为了更简单,我将其转换为一个元组。所以使用SQL查询的expectedOrder更难测试
    [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);
    }