web-dev-qa-db-ja.com

FluentAssertions単一のオブジェクトの複数のプロパティをアサートします

FluentAssertionsを使用してこのようなことを行う方法はありますか

response.Satisfy(r =>
    r.Property1== "something" &&
    r.Property2== "anotherthing"));

複数のAssertステートメントを記述しないようにしています。これは、私が最も長く使用していた https://sharptestex.codeplex.com/ で可能でした。ただし、SharpTestExは.NetCoreをサポートしていません。

10
kolhapuri

汎用のMatchアサーションを使用して、述語を介してサブジェクトの複数のプロパティを検証できる必要があります

response.Should()
        .Match<MyResponseObject>((x) => 
            x.Property1 == "something" && 
            x.Property2 == "anotherthing"
        );
9
Nkosi

.Match()ソリューションは、適切なエラーメッセージを返しません。したがって、適切なエラーが発生し、1つだけがアサートする場合は、次を使用します。

result.Should().BeEquivalentTo(new MyResponseObject()
            {
                Property1 = "something",
                Property2 = "anotherthing"
            });

匿名オブジェクト注意して使用してください!

特定のメンバーのみをチェックしたい場合は、以下を使用してください。

    result.Should().BeEquivalentTo(new
            {
                Property1 = "something",
                Property2 = "anotherthing"
            }, options => options.ExcludingMissingMembers());

複数のアサート

:与えられたすべてのソリューションは、1行のアサートを提供します。私の意見では、機能的に1つのアサーションである限り、複数行のアサーションに問題はありません。

一度に複数のエラーが必要なためにこれが必要な場合は、複数行のアサーションをAssertionScopeでラップすることを検討してください。

using (new AssertionScope())
{
    result.Property1.Should().Be("something");
    result.Property2.Should().Be("anotherthing");
}

上記のステートメントは、両方が失敗した場合、両方のエラーを同時に表示します。

https://fluentassertions.com/introduction#assertion-scopes

14
Nick N.