ストレージ用にEntity Frameworkを使用したMVC4プロジェクトがあります。私たちのテストでは、最近 Autofixture を使い始めましたが、本当に素晴らしいです。
私たちのモデル グラフは非常に深く、通常、AutoFixture で 1 つのオブジェクトを作成すると、グラフ全体が作成されます: Person -> Team -> Departments -> Company -> Contracts -> ....など。
これの問題は時間です。オブジェクトの作成には最大 1 秒かかります。そして、これは遅いテストにつながります。
私がよくやっているのは、次のようなことです。
var contract = fixture.Build<PersonContract>()
.Without(c => c.Person)
.Without(c => c.PersonContractTemplate)
.Without(c => c.Occupation)
.Without(c => c.EmploymentCompany)
.Create<PersonContract>();
そして、これは機能し、迅速です。しかし、この過度な仕様はテストを読みにくくし、時には.With(c => c.PersonId, 42)
unimportant のリストのような重要な詳細を失うことがあり.Without()
ます。
これらの無視されたオブジェクトはすべて、Entity Framework のナビゲーション プロパティであり、すべて仮想です。
仮想メンバーを無視するよう AutoFixture に指示するグローバルな方法はありますか?
を作成しようとしましISpecimentBuilder
たが、うまくいきません:
public class IgnoreVirtualMembers : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
if (request.GetType().IsVirtual // ?? this does not exist )
{
return null;
}
}
}
ISpecimenBuilder
構築しているオブジェクトが別のクラスの仮想メンバーであることを検出する方法が見つからないようです。おそらくISpecimenBuilder
、これはこれを行うのに適切な場所ではありません。他のアイデアはありますか?