7

我有一个验证方法的收集输出的测试。测试的这种变体通过:

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

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

这种测试变体失败,出现错误“Expected item[0] to be InProcess, but found Pending”:

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

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

显然,ShouldBeEquivalentTo关心收集项目的顺序,而不关心BeEquivalentTo。为什么这两种方法的等效概念不同?

4

1 回答 1

12

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

于 2013-04-22T18:55:40.017 回答