我有一个测试,可以验证方法的集合输出。测试的这种变化通过了:

    [TestMethod, TestCategory("BVT")]
    public void TheStatusesAreReturned()
    {
        var expectedUnprocessedStatuses = new List<FileUploadStatus>
            {
                FileUploadStatus.InProcess,
                FileUploadStatus.Pending,
            };

        Sut.GetUnprocessedStatuses()
            .Should()
            .BeEquivalentTo(expectedUnprocessedStatuses);
    }

测试的这种变体失败,错误为“预期的项目[0]处于处理中,但发现未决”:
    [TestMethod, TestCategory("BVT")]
    public void TheStatusesAreReturned2()
    {
        var expectedUnprocessedStatuses = new List<FileUploadStatus>
            {
                FileUploadStatus.InProcess,
                FileUploadStatus.Pending,
            };

        Sut.GetUnprocessedStatuses()
            .ShouldBeEquivalentTo(expectedUnprocessedStatuses);
    }

显然,ShouldBeEquivalentTo在乎收集项的顺序,而BeEquivalentTo不在乎。为什么两种方法之间的等效概念不同?

最佳答案

你是对的。 Should().BeEquivalentTo() 正在使用单个项目 Equals() 实现来验证等效性,并且自版本 1 以来一直存在。 FA 2.0 中引入的较新的 ShouldBeEquivalentTo() 正在进行深入的结构比较,并报告任何差异.对于 2.1,我将在默认情况下将行为更改为更像集合等效性

关于unit-testing - FluentAssertions ShouldBeEquivalentTo() 与 Should().BeEquivalentTo(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16149497/

10-11 06:57