C# 如何使用NUnit检查列表订单(其他属性)?
我希望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=新列表 { 新
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);
}