Open Generics を使用するオブジェクト モデルがあります (はい、はい、2 つの問題があります。それが私がここにいる理由です :) :-
public interface IOGF<T>
{
}
class C
{
}
class D
{
readonly IOGF<C> _ogf;
public D( IOGF<C> ogf )
{
_ogf = ogf;
}
}
AutoFixture にD
上記の Anonymous インスタンスを生成させようとしています。ただし、AutoFixture 自体には を構築するための戦略が組み込まれていないため、次のことがIOGF<>
わかります。
public class OpenGenericsBinderDemo
{
[Fact]
public void X()
{
var fixture = new Fixture();
Assert.Throws<Ploeh.AutoFixture.ObjectCreationException>( () =>
fixture.CreateAnonymous<D>() );
}
根底にあるメッセージは次のとおりです。
Ploeh.AutoFixture.ObjectCreationException : AutoFixture は IOGF`1[C] からインスタンスを作成できませんでした。おそらく、パブリック コンストラクターがなく、抽象型または非パブリック型であるためです。
具体的な実装を提供できることをうれしく思います。
public class OGF<T> : IOGF<T>
{
public OGF( IX x )
{
}
}
public interface IX
{
}
public class X : IX
{
}
関連付けられたバインディング:
fixture.Register<IX,X>();
次のテストに合格するにはどうすればよいですか (または、そのように問題を見る必要がありますか??)。
public class OpenGenericsLearning
{
[Fact]
public void OpenGenericsDontGetResolved()
{
var fixture = new Fixture();
fixture.Inject<IX>( fixture.Freeze<X>() );
// TODO register or do something that will provide
// OGF<C> to fulfill D's IOGF<C> requirement
Assert.NotNull( fixture.CreateAnonymous<D>());
}
}
(これに関する議論や問題が codeplex サイトにあります - 私はこれを簡単に実装する必要があり、これが単に悪い考えである場合、および/または何かを見逃した場合は、これを削除してもかまいません)
EDIT 2: (マークの回答に関するコメントも参照してください) ここでの (明らかに不自然な) コンテキストは、小さな (制御された/理解しやすい :) ペアまたはトリプレットではなく、大規模な「ほぼ完全なシステム」テスト対象システム オブジェクト グラフの受け入れテストです。ユニットまたは統合テスト シナリオのクラスの。自問自答の括弧内の文で暗示されているように、私はこの種のテストが理にかなっていると完全に確信しているわけではありません.