一种新的依赖注入和单元测试。
为什么部分:
有一些dll:
- MyApp.Services.Common.dll
- MyApp.Services.ProductA.dll -> 具有 ISomeDependency 及其实现
- MyApp.Services.ProductB.dll -> 具有 IOtherDependency 及其实现
- MyApp.Presentation.WindowsService.dll
WindowsService 仅引用 Common.dll 以使测试、版本控制和部署更容易。
问题是 ProductA 和 B.dll 中的任何依赖项都不能从 WindowsService 发送到 Common dll,因为它需要 WindowsService 中对 ProductA 和 B 的程序集引用(不想要)
因此,单元测试在调用 Common.dll 中的代码时无法隔离依赖关系。
因此,为了隔离依赖关系,代码有一个重载的构造函数,它只为了测试而暴露依赖关系。
这个可以吗?
请参见下面的示例:
单元测试将模拟依赖并调用重载的构造函数,但真实代码调用默认构造函数
public class ClassUnderTest
{
private ISomeDependency a;
private IOtherDependency b;
// constructor called by code
public ClassUnderTest()
{
this.a = new SomeDependency();
this.b = new OtherDependency();
}
public ClassUnderTest(ISomeDependency a, IOtherDependency b)
{
this.a = a;
this.b = b;
}
}