ストレージ用のEntity Frameworkを持つMVC4プロジェクトがあります。 私たちのテストでは、最近Autofixtureを使い始めました。本当に素晴らしいです。仮想プロパティを無視します
当社のモデルグラフが非常に深いであり、通常AutoFixtureで一つのオブジェクトを作成すると、グラフ全体を作成します。人 - >チーム - >部門 - >会社 - >契約 - > ....など
この問題は時間です。 オブジェクトの作成には最大で1秒かかります。そして、これはテストが遅くなる。私は自分自身が多くのことをやって見つける何
はこのようなものです:
var contract = fixture.Build<PersonContract>()
.Without(c => c.Person)
.Without(c => c.PersonContractTemplate)
.Without(c => c.Occupation)
.Without(c => c.EmploymentCompany)
.Create<PersonContract>();
そして、これは動作し、それが迅速です。しかし、この過剰仕様はテストを読みにくくし、時には重要ではない.Without()
のリストに.With(c => c.PersonId, 42)
のような重要な情報を失います。
これらの無視されたオブジェクトはすべて、Entity Frameworkのナビゲーションプロパティであり、すべて仮想です。
仮想メンバーを無視するようにAutoFixtureに指示するグローバルな方法はありますか?
私はISpecimentBuilder
を作成しようとしたが、ない運:私たちが構築され、そのオブジェクトを検出するために、ISpecimenBuilder
に方法を見つけるように見えることはできません
public class IgnoreVirtualMembers : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
if (request.GetType().IsVirtual // ?? this does not exist)
{
return null;
}
}
}
が別のクラスでの仮想メンバーではありません。おそらくISpecimenBuilder
これはこれを行うのに適切な場所ではありません。他のアイデア?
保存日。しかし、少なくとも米国ではCustomisationsのスペルがカスタマイズされています。 :) –
私は知っている、厄介なzはすべての* sationsになる。英国では、 "s" - )))) – trailmax
これは素晴らしい解決策です。私はクラスを自分のプロジェクトにドロップしてすぐにMoqと一緒に使っていました。よくできました! – Halcyon