私は両方のライブラリに不慣れで、大規模なプロジェクトでの使用にコミットする前に、単体テストでのローコード作業の自動モックのオプションを明確にする必要があります。
Google でしばらく時間を費やした後、他の IOC とモッキング製品の組み合わせとは異なり、LightInject+Nsubstitute がユニットの手配段階で何もしないデフォルト モックの宣言を簡素化するための既製のプラグイン ライブラリは利用できないと結論付けました。テスト。
単体テストの範囲だけのために LightInject コンテナーを一時的な拡張モック オブジェクトでオーバーライドする方法について LightInject のドキュメントを読みましたが、単体テストが触れる可能性のある何もしない既定の分離モックについてはどうでしょうか。LightInject コンテナ内での作成を自動化する方法はありますか?
私が探している内部 IOC コンテナーの動作は次のとおりです。
public class LightInject.ServiceContainer
{
..
public T GetInstance<T)
{
if (( this.RegisteredInterfaces.Any( i => i.Itype == T ) == false )
&& ( this.TemporaryUnitTestOverrides.Any( i => i.Itype == T ) == false ))
&& ( /* this container is configured with an automocking delegate */ ))
return autoMockCreatorDelegate<T>.Invoke();
}
LightInject の IProxy と Interceptors は、いくつかの内部モック オブジェクト ビルディング ブロックを提供しているようですが、比較すると Nsubstitute ライブラリはフル機能を備えています。
デフォルトで何を意味するのかを明確にし、モックと拡張モックを行いません。
// default do nothing mock
var calculator = Substitute.For<ICalculator>();
// Enhanced mock that will return 3 for .Add(1,2)
var calculator = Substitute.For<ICalculator>();
calculator.Add(1, 2).Returns(3);
明らかに、2 番目の拡張タイプのモックは、単体テストごとにローカルで作成する必要があります。