public class MyService
{
private readonly ISomething _something;
private readonly Func<IRarelyGetUsed> _rarelyGetUsed;
public MyService(ISomething something, Func<IRarelyGetUsed> rarelyGetUsed)
{
_something = something;
_rarelyGetUsed = rarelyGetUsed;
}
}
を使用して依存関係を持っているとき、私たちはIOCのためAutofacを使用し失敗し、それがされるまで、これらの依存関係が解決されませんので、我々はFunc<T>
アプローチを使用して、大きなパフォーマンス向上(負荷時)を得ることができましたいくつかのシナリオでは、特定の依存関係は使用されません。部品番号のCreateInstanceは、コンストラクタはのFunc <T>
また、ユニットテストにはMoqを使用しています。それが吹くこの時点で
var _container = new AutoMocker();
var _service = _container.CreateInstance<MyService>();
- のFuncの依存関係とうまくプレイする部品番号を伝えるためにどのようにSystem.NullReferenceException : Object reference not set to an instance of an object.
誰もが知っていますか?
Func<IRarelyGetUsed>
からIRarelyGetUsed
に変更する場合は例外ではありません。
編集:ナゲットパッケージはかなり古いです - パッケージをアップデートした後https://github.com/tkellogg/Moq.AutoMocker
これは現在動作しています。でセットアップするには、上記の方法結果の結果をしようと
_container.GetMock<Func<IRarelyGetUsed>>().Setup(p => p().DoSomething(It.IsAny<string>())).Returns(true).Verifiable();
- -
しかし、解決するためのもう一つの問題がありますUnable to cast object of type 'System.Linq.Expressions.InstanceMethodCallExpressionN' to type 'System.Linq.Expressions.InvocationExpression'
編集2:
var serviceMock = _container.GetMock<IRarelyGetUsed>();
serviceMock.Setup(r => r.DoSomething()).Returns(someData);
_container.GetMock<Func<IRarelyGetUsed>>().Setup(s => s()).Returns(serviceMock.Object);
上記の機能は動作しますが、Func<IRarelyGetUsed>
との両方を設定する必要があります210 - 1つだけ行う必要がある場合はいいでしょう。それ以外の場合は、テストごとにオーバーヘッドが増えます。
編集内容は、意味をなさないデリゲート(Func)とあなたが嘲笑したい実際のものを設定します。おそらく、 'SetupFunc(Mock mock、object returnData)'のような 'AutoMocker'の拡張メソッドを書くことができます。これは、編集2で書き留めた定型コードです。 –
Scott