我在.NET 3.5 C#应用程序中使用NUnit 2.5.6.10205。我正在使用NUnit的Collection Constraint断言IEnumerable是否按参数排序。
它似乎对我不起作用,因为我得到一个异常,表明我的实际值不是IEnumreable。 allEntities是List<T>
,实现IEnumerable<T>
。我相信NUnit正在寻找IEnumerable
,而不是IEnumerable<T>
,而IEnumerable<T>
实现IEnumerable
。这是共同/反差的问题吗?
Assert.That(allEntities, Is.All.Ordered.By("CreationDate"));
System.ArgumentException : The actual value must be an IEnumerable
Parameter name: actual
另外,有什么方法可以使用Lambda表达sort属性吗?对属性使用文字字符串会使其变脆。
答案 0 :(得分:2)
我使用的是All contstraint,但这用于对列表中的每个项目进行断言,即
// checks that for each T in myList, that it is greater than 5
Assert.That(myList, Is.All.GreaterThan(5));
来自NUnit:“对集合中的每个项目应用约束,只有在所有项目都成功时才会成功。”
我想测试列表本身的属性,所以我想:
// checks that the list itself is ordered by the property CreationDate
Assert.That(allEntities, Is.Ordered.By("CreationDate"));
希望其他人会在将来发现这个问题/答案有用。
答案 1 :(得分:1)
不需要All
,请尝试:
Assert.That(allEntities, Is.Ordered.By("CreationDate"));