我正在使用依赖注入来模拟类,以便对依赖于它们的其他类进行单元测试:
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 及其每个类实例都是在我的应用程序中传递的巨大全局变量。
- 我正在同时初始化我的所有课程。
- 我必须为我为单元测试编写的每个类提供一个接口——我允许单元测试来决定我的程序的设计(如果没有这个约束,我编写的大多数类都是没有接口的具体实现)。
关于如何解决这些问题的建议将不胜感激!