在C#中,是否可以对给定类的新创建的实例进行模拟?

问题描述 投票:0回答:1

我有一个类,它接收一个配置对象作为构造函数的参数,然后在构造函数中使用该配置创建新的对象。那么一般情况下,是否可以在不显式依赖注入的情况下,对新创建的对象进行模拟?

相关的部分代码是。

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循环里面?

我使用.NET Framework 4.7.2和Moq 4.10,如果相关的话。

c# moq
1个回答
2
投票

我认为不能模拟 new 操作符,但你可以稍微重构一下你的代码,将创建的 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 类。

© www.soinside.com 2019 - 2024. All rights reserved.