Предположим, унаследованный класс и структура методов, как показано ниже
public class Foo
{
public void Frob(int a, int b)
{
if (a == 1)
{
if (b == 1)
{
// does something
}
else
{
if (b == 2)
{
Bar bar = new Bar();
bar.Blah(a, b);
}
}
}
else
{
// does something
}
}
}
public class Bar
{
public void Blah(int a, int b)
{
if (a == 0)
{
// does something
}
else
{
if (b == 0)
{
// does something
}
else
{
Baz baz = new Baz();
baz.Save(a, b);
}
}
}
}
public class Baz
{
public void Save(int a, int b)
{
// saves data to file, database, whatever
}
}
И затем предположим, что руководство выдает туманный мандат на выполнение модульного тестирования для каждой новой вещи, которую мы делаем, будь то дополнительная функция, измененное требование илиИсправлена ошибка.
Я могу быть сторонником буквального толкования, но я думаю, что фраза «модульное тестирование» что-то значит.Это не означает, например, что при заданных входах 1 и 2 модульный тест Foo.Frob
должен пройти успешно, только если 1 и 2 сохранены в базе данных.Основываясь на том, что я прочитал, я полагаю, что в конечном итоге это означает на основе входов 1 и 2, Frob
вызвано Bar.Blah
.Не важно, сделал ли Bar.Blah
то, что должен был сделать, это не моя непосредственная задача.Если меня интересует тестирование всего процесса, я считаю, что для этого есть другой термин, верно?Функциональное тестирование?Сценарий тестирования?Без разницы.Поправьте меня, если я слишком жесток, пожалуйста!
На данный момент придерживаясь моей жесткой интерпретации, давайте предположим, что я хочу попробовать использовать внедрение зависимостей, с одним преимуществом в том, что я могу издеваться над моими классами такчто я могу, например, , а не сохранить мои тестовые данные в базе данных или файле или в любом другом случае.В этом случае Foo.Frob
нужно IBar
, IBar
нужно IBaz
, IBaz
может потребоваться база данных.Где эти зависимости должны быть введены?В Foo
?Или Foo
просто нужно IBar
, а затем Foo
отвечает за создание экземпляра IBaz
?
Когда вы попадаете во вложенную структуру, такую как эта, вы можете быстро увидеть, что можетбыть несколько зависимостей необходимо.Каков предпочтительный или принятый метод выполнения такой инъекции?