これを達成するために (しかし失敗しています)、期待されるオブジェクトと実際のオブジェクトのプロパティを検討し、それらの値が等しいことを確認しています。これは、それらのプロパティが単一のオブジェクト、つまりリストや配列などではない限り、期待どおりに機能しますIEnumerable
... プロパティが何らかのリストである場合、テストは失敗します (ループ内Assert.AreEqual(...)
で)。for
public void WithCorrectModel<TModelType>(TModelType expected, string error = "")
where TModelType : class
{
var actual = _result.ViewData.Model as TModelType;
Assert.IsNotNull(actual, error);
Assert.IsInstanceOfType(actual, typeof(TModelType), error);
foreach (var prop in typeof(TModelType).GetProperties())
{
Assert.AreEqual(prop.GetValue(expected, null), prop.GetValue(actual, null), error);
}
}
リスト プロパティを扱う場合、代わりに を使用すれば期待どおりの結果が得られますCollectionAssert.AreEquivalent(...)
が、そのためには にキャストする必要がありICollection
、リストされている型を知る必要がありますが、これは知りません (したくありません)。
また、どのプロパティがリスト型であるかを知る必要がありますが、その方法はわかりません。
では、任意の型の 2 つのオブジェクトが同等であると断言するにはどうすればよいでしょうか。
注: 1つはテスト対象のオブジェクトから取得され、もう 1 つは比較対象としてテスト クラスに組み込まれているため、それらがequalである必要は特にありません。