我希望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"));
答案 0 :(得分:2)
显然,您知道NUnit中没有ThenBy
语法元素,但希望By
多次应用。这两个功能都不可用,而CollectionOrderedConstraint仅支持单个属性名称。在NUnit中实现这两种方法并不是非常困难,因此您应该考虑提交问题来请求该功能。
目前,这是不可能的。您应该考虑以正确的顺序创建预期的元组列表的方法,并使用测试两个列表的相等性。
答案 1 :(得分:1)
作为另一种选择,您可以查看应该使用的框架并执行类似下面的操作
[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);
}