Тип нового для впрыска и модульного тестирования зависимости.Конструктор перегрузки для проведения модульных испытаний
почему часть:
Есть некоторые библиотеки 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 в общую библиотеку 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;
}
}