如何使用FluentAssertions测试嵌套集合

时间:2013-05-10 07:40:38

标签: c# collections tdd fluent-assertions

我有以下规格

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 个答案:

答案 0 :(得分:2)

这是因为collection.Should()。BeEquivalentTo()使用您的类型的默认Equals()实现来确保第一个集合中的每个项目出现在第二个集合中的某个位置。你真正需要的是我在Fluent Assertions 2.0中引入的新equivalency feature。不幸的是,我最近才意识到混淆语法(collection.Should()。BeEquivalentTo()与ShouldAllBeEquivalentTo())。