2013-05-14 4 views
15

System.Type以上を使用してAutoFixtureからオブジェクトを作成する必要があります。しかし、単純に型をとるCreateAnonymous()のオーバーロードがあるようには見えません。彼らはすべて、コンパイル時に汎用Tを期待しています。System.TypeをTに変換する方法はありますか?使用方法の詳細はAutoFixture:System.TypeからCreateAnonymousを作成する方法

編集:私は複雑なマッピングのシナリオをサポートするコンポーネントを注入するためのフックを持っているAutoMapperを使用してい

void ConstructServicesUsing(System.Func<Type,object> constructor) 

あなたが署名からわかるように、クライアントが登録できますAutoMapperは注入されたサービス(ほとんどValueResolverの実装)が必要なときに呼び出すFuncです。

プロダクションビルドでは、このメソッドはStructureMapコンテナを呼び出してコンポーネントを取得します。しかし、私のマッピングコードをユニットテストすると、スタブの実装を提供する必要があります。それ以外の場合、AutoMapperは例外をスローします。私はAutomocking ContainerとしてAutoFixture + Moqを使用しているので、完全に水和されたスタブをAFに新しくさせるのは当たり前なので、私はユニットテストコードを書くことに集中することができます。

+2

あなたの使用シナリオについて詳しく教えてください。どのような種類のテストでは、コンパイル時に型が分からないので、 'CreateAnonymous'メソッドを使用できません。 – nemesv

答えて

28

あなたは非常に稀にこれを実行する必要がないはずなので、それは、possibleだが、意図的に隠された:

var specimen = new SpecimenContext(fixture).Resolve(type); 

AutoFixtureで拡張ポイントのトンは、ということがあります弱い型指定のCreateメソッドよりも優れた方法です。あなたは何を達成しようとしていますか?

+0

ありがとうございました。魅力のように働いた –

+0

ありがとう、マーク。私の場合、インスタンスのプロパティをすべてチェックして、PropertyChangedイベントを適切に発生させるために、単一のヘルパーを作成しています。ちょっとハッキリかもしれませんが、私は一度だけ一般的な方法でテストを書いて、それを心配する必要はありません。 –

+0

@MattKlein [AutoFixture.Idioms](http://www.nuget.org/packages/AutoFixture.Idioms)を見てください。あなたはそれを「イディオムアサーション」にすることができます。 –

関連する問題