Sam*_*ber 22 c# nunit unit-testing fluent-assertions
我正在尝试使用C#中的FluentAssertions建立两个列表的等价,其中有两件事是重要的:
FluentAssertions(甚至是NUnit)中没有这样做的功能吗?
干杯!
Den*_*men 50
默认情况下,ShouldBeEquivalentTo()将忽略集合中的顺序,因为在大多数情况下,如果两个集合按任何顺序包含相同的项目,则它们是等效的.如果你关心的秩序,只是使用的重载之一WithStrictOrdering()的options =>参数.
例:
var myList = Enumerable.Range(1, 5);
var expected = new[]
{
1, 2, 3, 4, 5
};
//succeeds
myList.ShouldBeEquivalentTo(expected, options => options.WithStrictOrdering());
//fails
myList.Reverse().ShouldBeEquivalentTo(expected, options => options.WithStrictOrdering());
Run Code Online (Sandbox Code Playgroud)
阅读文档中有关这些选项的更多信息.
小智 8
晚这里的比赛,但我用的这个流利断言版本在这里:
actualRows.ShouldBeEquivalentTo(expectedRows,options => options.WithStrictOrdering());
它将检查所有属性的所有值的等价性,并使用此选项设置订单计数.如果顺序无关紧要,在这种情况下省略选项参数,它将确保来自一个集合的项目将存在于另一个集合中的某个位置.希望这有助于某人
我认为你可以这样做:
myObject.List.SequenceEqual(myOtherObject.ListToCompare).Should().BeTrue();
Run Code Online (Sandbox Code Playgroud)
这仅在使用时列表中的元素相等时才有效 Object.Equal(element1, element2)
如果不是这种情况,那么您需要为列表中的对象实现自己的 EqualityComparer,然后使用:
myObject.List.SequenceEqual(myOtherObject.ListToCompare, myEqualityComparer)
.Should().BeTrue();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10479 次 |
| 最近记录: |