Ile*_*ssa 7 c# sorting tdd unit-testing fluent-assertions
我正在我的 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"});
Run Code Online (Sandbox Code Playgroud)
然后我去要求对我分类的供应商进行测试。
我知道 Fluent 断言有BeInAscendingOrder和BeInDescendingOrder方法,但是即使在查看文档并遵循可能相关的问题之后,我也看不到链接排序方法的示例。
我目前的测试验证是这样的:
results.Should().HaveCount(4).And.BeInAscendingOrder(x => x.Ref)
.And.BeInAscendingOrder(x => x.Name);
Run Code Online (Sandbox Code Playgroud)
我期待验证的工作有点像LINQ它有的地方OrderBy(x => x.Ref).ThenBy(x => x.Name)。
但是,在运行测试时,它失败了,因为它期望集合按升序Name排序(最终排序断言)。
有没有办法告诉 Fluent Assertions 排序应该相互结合应用,而不仅仅是按顺序应用?
所以我尝试了 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);
Run Code Online (Sandbox Code Playgroud)