Если ваш код зависит от ElementFactory
, вы можете добавить интерфейс этого класса через конструктор класса MessageProcessor
.
Это называется "Инверсия управления" .
Так, например, вы создали интерфейс IElementFactory
, который вы можете внедрить в класс с помощью конструктора следующим образом:
public class messageProcessor
{
private readonly IElementFactory elementFactory;
public messageProcessor(IElementFactory elementFactory)
{
this.elementFactory = elementFactory;
}
public string Process(string settings)
{
var strategyToUse = new legacyStrategy();
...
var resources = new messageResource(
this.elementFactory,
strategyToUse,
...);
}
}
Теперь в своем тесте вы можете внедритьзаменитель IElementFactory
. Например:
public void Test()
{
var elementFactory = Substitute.For<IElementFactory>();
// tell the substitute what it should return when a specific method is called.
elementFactory.AnyMethod().Returns(something);
var processor = new messageProcessor(elementFactory);
}
Во время выполнения ваше приложение должно внедрить экземпляр IElementFactory
в класс messageProcessor
. Вы должны сделать это через «Внедрение зависимости» .