【问题标题】:How to test nested collections with FluentAssertions如何使用 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 在比较集合时是否不起作用 收藏?

【问题讨论】:

    标签: c# collections tdd fluent-assertions


    【解决方案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。
    猜你喜欢
    • 2022-12-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多