2017-12-13 27 views
0

Autofacキー登録を使用する工場周辺でテストを書くのに問題があります。 AutofacモジュールでAutoMock - 鍵付き登録による単体テスト方法

、私はこのようなものを登録します。私はできる、しかし

builder.RegisterType<TypeAMessageHandler>().As<IMessageHandler>() 
    .Keyed<IMessageHandler>(MessageTypeEnum.A); 

builder.RegisterType<TypeBMessageHandler>().As<IMessageHandler>() 
    .Keyed<IMessageHandler>(MessageTypeEnum.B); 

builder.RegisterType<MessageHandlerFactory().As<IMessageHandlerFactory>(); 

はその後、工場のコンストラクタAutofacによってそのコンストラクタに注入素敵なインデックスを取得します私がautomock.Create<MessageHandlerFactory>()を使用するとき、AutomockでユニットテストのためにIIndex<,>を注入する方法を理解していない。 AutoMockにメッセージハンドラの実装を提供しても、キー付きのインデックスには入れられません。 IIndexの明示的な実装を作成し、それを提供するAutomockにも働かない - 両方のケースで、私の工場で空のIIndex<,>が注入される。

キー登録をテストする正しい方法は何ですか?

答えて

0

まあ、私は明示的にSUTを構築することで問題を回避するために管理してきました:

internal class MockIndex<T, T1> : Dictionary<T, T1>, IIndex<T, T1> 
{ 
} 

IIndex<FileTransportTypeEnum, IMessageHandler> index = new MockIndex<MessageTypeEnum, IMessageHandler> 
{ 
    {MessageTypeEnum.A, new TypeAMessageHandler()}, 
    {MessageTypeEnum.B, new TypeBMessageHandler()} 
}; 

_target = new MessageHandlerFactory(index); 

私の本当の例であり、追加の依存関係があり、そして、私はまだ私のことができます方法を見つけるしたいと思いますAutomockを使用してそれらのデフォルト実装を提供します。さらに、このようにしても、Autofacは実際に呼び出されるたびにTypeAMessageHandlerと同じオブジェクトを返すので、実際の動作には影響しません。

関連する問題