我正在Kendo网格上实现可排序的列,用户期望的行为是允许同时对多个列进行排序。
很自然地,我首先编写一个单元测试,以能够首先通过Ref
升序,然后Name
升序来验证排序(默认情况下)。
有问题的测试供应商在这里:
_context.Suppliers.Add(new Supplier { Ref = "abc", Name = "steve"});
_context.Suppliers.Add(new Supplier { Ref = "abc", Name = "bob"});
_context.Suppliers.Add(new Supplier { Ref = "cde", Name = "ian"});
_context.Suppliers.Add(new Supplier { Ref = "fgh", Name = "dan"});
然后我去要求我的分类供应商进行测试。
我知道流畅的断言有BeInAscendingOrder
和BeInDescendingOrder
方法,但是即使在阅读了文档和following possibly related questions之后,我也看不到链接排序方法的示例。
我当前的测试验证是这样的:
results.Should().HaveCount(4).And.BeInAscendingOrder(x => x.Ref)
.And.BeInAscendingOrder(x => x.Name);
我希望验证的工作方式类似于LINQ
,其中包含OrderBy(x => x.Ref).ThenBy(x => x.Name)
。
但是,在运行测试时,它失败了,因为它期望该集合按Name
(最终的排序断言)升序排列。
是否有一种方法可以告诉Fluent断言,排序应该相互结合而不是按顺序应用?
答案 0 :(得分:0)
一种方法是使用BeInAscendingOrder
的重载:
BeInAscendingOrder(IComparer<T> comparer, string because = "", params object[] args)
,然后创建一个继承自SupplierComparer
的{{1}}。
这是一个完整的例子
Comparer<Supplier>
答案 1 :(得分:0)
因此,我尝试了Fabio / Stuart使用WithStrictOrdering
的评论,并且该评论工作了一段时间。
但是,当我要更改排序顺序时,我的测试会不断通过而不是失败(因为我更改了测试的排序,但没有更改方法)。
以下功能非常出色:
var resultsList = results.ToList();
var expectedResults = resultsList.OrderByDescending(x => x.IsSupplierInvalid)
.ThenBy(x => x.Ref).ToList();
resultsList.Should().HaveCount(4).And.ContainInOrder(expectedResults);