概要: Fluent アサーションを使用して単体テストを作成しているときに、以下で詳しく説明するいくつかの問題に遭遇しました。追加情報が必要な場合はお知らせください。ただし、これが実際に予想される動作なのか、何か誤解しているのかはわかりません。
問題 1 は、私が観察しているインスタンス例外に設定されていないオブジェクト参照です。問題 2 は、ExcludeMissingProperties の定義方法に比べて予期しない動作です。
以下の私の質問では、私が話している問題を実証するのに役立つ次のサンプル クラスを使用しています。
public class B
{
public string Name { get; set; }
public int Id { get; set; }
}
internal class BTo
{
internal int Id { get; set; }
}
public class C
{
public int ID { get; set; }
public B B { get; set; }
}
問題 1: 期待値に複合型プロパティが設定されていない場合、オブジェクト参照がインスタンス例外に設定されません。
を。予期されるオブジェクト (期待) が複合型プロパティを設定せず、実際の (サブジェクト) が設定する場合、オブジェクト参照がインスタンスに設定されていないというエラーがスローされます。これは単純なオブジェクトには問題ないかもしれませんが、DTO が大きくネストされている実際のテスト シナリオでは、例外の原因を見つけるのが難しくなります。
b. この例外に関連して、例外を引き起こしたプロパティの名前をスローできれば非常に便利です。これは未処理のシナリオであることを理解しています。
サンプルテスト:
var expected = new C
{
ID = 1,
};
var actual = new C
{
ID = 1,
B = new B
{
Id = 1,
Name = "name"
}
};
actual.ShouldBeEquivalentTo(expected, expr => expr.ExcludingMissingProperties());
問題 2: ExclusiveMissingProperties の定義 デフォルトの動作を回避するために、多くのコードを作成する必要がありました。
多くのテスト ケースでは、期待値のプロパティを設定したくありません。例:主キーが生成されたことを確認したいデータベース挿入シナリオ(したがって、値がデフォルトであってはならないというのは十分なケースです)が、値が何であるかは気にしません。同様に、私のテスト ケースに関係のない他のノイズ プロパティがあります。
したがって、これは失敗します:
var expected = new B { Name = "somevalue"};
var actual = new B { Id = 1, Name = "somevalue" };
actual.ShouldBeEquivalentTo(expected, x => x.ExcludingMissingProperties());
これは合格します:
var expected = new BTo { Id = 1};
var actual = new B { Id = 1, Name = "somevalue" };
actual.ShouldBeEquivalentTo(expected, e => e.ExcludingMissingProperties());