如何使用 FluentAssertions 测试嵌套集合
Posted
技术标签:
【中文标题】如何使用 FluentAssertions 测试嵌套集合【英文标题】:How to test nested collections with FluentAssertions 【发布时间】:2013-05-04 20:24:11 【问题描述】:我有以下规格
BidirectionalGraph Fixture = new BidirectionalGraph();
public void VerticesShouldBeAbleToAssociateMultipleEdges()
int a = 0;
int b = 1;
int c = 2;
Fixture.AddEdge(a, b);
Fixture.AddEdge(b, c);
Fixture.AddEdge(c, a);
Fixture.EdgesFrom(a).Should().BeEquivalentTo
( new []a, b
, new []a, c);
EdgesFrom 是这样定义的
public IEnumerable<int[]> EdgesFrom(int vertex)
但是我的测试失败了
Result Message: Expected collection
0, 1, 0, 2 to be equivalent to
0, 1, 0, 2.
这对我来说不太有意义,因为它们显然是等价的。
FluentAssertions
在比较集合时是否不起作用
收藏?
【问题讨论】:
【参考方案1】:这是因为 collection.Should().BeEquivalentTo() 使用您的类型的默认 Equals() 实现来确保第一个集合中的每个项目出现在第二个集合中的某个位置。你真正需要的是我在 Fluent Assertions 2.0 中引入的新 equivalency feature。不幸的是,我最近才意识到令人困惑的语法(collection.Should().BeEquivalentTo() 与 ShouldAllBeEquivalentTo())。
【讨论】:
天真地我会假设 Should().BeEquivalentTo() 会进行嵌套结构相等性测试。对于无限深度,Should().BeEquivalentTo(depth:-1) 怎么样,让 depth 采用默认值1
以保持向后兼容性。
有道理。在内部,Should().BeEquivalentTo() 应该使用与 ShouldBeEquivalentTo() 提供的相同的结构等效 API。以上是关于如何使用 FluentAssertions 测试嵌套集合的主要内容,如果未能解决你的问题,请参考以下文章
如何使用FluentAssertions在XUnit中测试MediatR处理程序
如何在 FluentAssertions 中使用“Which”?
如何使用 Fluent Assertions 在不等式测试中测试异常?
使用 FluentAssertions 和 NSubstitute 的异步单元测试是不确定的