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しません。2 つの方法で等価性の概念が異なるのはなぜですか?

4

1 に答える 1

12

あなたは正しいです。Should().BeEquivalentTo() は、個々のアイテムの Equals() 実装を使用して同等性を検証し、バージョン 1 から使用されています。FA 2.0 で導入された新しい ShouldBeEquivalentTo() は、詳細な構造比較を行い、相違点についてもレポートします。 . 2.1 では、動作をデフォルトでコレクションと同等になるように変更します。

于 2013-04-22T18:55:40.017 に答える