クラスに依存する他のクラスを単体テストするために、依存性注入を使用してクラスをモックアウトしています。
class Foo : IFoo
{
// production code
}
class MockFoo : IFoo
{
// mock so other classes that depend on Foo can be unit tested
}
class Bar
{
public DoSomething()
{
var barValue = 20;
// use dependency injection to get Foo instance.
DependencyInjection.Instance.Foo.ExampleMethod(barValue);
}
}
しかし、私の依存性注入クラスのセットアップは、扱いにくく、迷路のようで複雑になっています。
public class DependencyInjection
{
public Setup()
{
this.Foo = new Foo();
this.Bar = new Bar("example constructor string");
this.Bat = new Bat(123,234);
// for every single class in my application!
}
}
(わかりやすくするために簡略化していますが、実際の実装は数十のクラスとそのコンストラクターで構成されていることが想像できます)。
他にもいくつかの問題があります。
- DependencyInjection とその各クラス インスタンスは、アプリケーション全体で渡される巨大なグローバル変数です。
- すべてのクラスを同時に初期化しています。
- 単体テスト用に作成するすべてのクラスにインターフェースを提供する必要があります – 単体テストでプログラムの設計を指示できるようにしています (この制約がなければ、私が作成するほとんどのクラスはインターフェースのない具体的な実装になります) )。
これらの問題を解決する方法についてのアドバイスをいただければ幸いです。