Можно ли смоделировать вновь созданные экземпляры для данного класса в C#? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть класс, который принимает объект конфигурации в качестве параметра конструктора, а затем создает новые объекты в конструкторе, используя эту конфигурацию. Так в общем, возможно ли издеваться над вновь созданным объектом без явного внедрения зависимости?

Соответствующие части кода:

public class Manager
{
    List<Config> _configList;
    List<StateObject> _stateObjectList;

    public Manager(List<Config> configList)
    {
        _configList = configList;

        foreach (config in _configList)
        {
           _stateObjectList.Add(new StateObject(config));
        }
    }
}

В частности, могу ли я каким-то образом высмеять возвращенный новый StateObject внутри foreach l oop в конструкторе?

Я использую. NET Framework 4.7.2 с Moq 4.10, если он уместен

1 Ответ

2 голосов
/ 01 мая 2020

Я не думаю, что вы можете смоделировать оператор new в C#, но вы можете немного реорганизовать свой код и переместить создание StateObject в отдельный класс (и создать для этого интерфейс)

public interface IStateObjectFactory
{
    StateObject Create(Config config);
}

public class StateObjectFactory : IStateObjectFactory
{
    public StateObject Create(Config config)
    {
        return new StateObject(config);
    }
}

Затем вы можете передать его в Manager класс

public Manager(List<Config> configList, IStateObjectFactory factory)
{
    _configList = configList;

    foreach (var config in _configList)
    {
        _stateObjectList.Add(factory.Create(config));
    }
}

. Этот подход позволяет легко смоделировать IStateObjectFactory интерфейс с любым желаемым поведением. Я не думаю, что это возможно без внедрения этой зависимости в класс Manager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...