是否可以在 C# 中为给定的 class 模拟新创建的实例?

Is it possible to mock newly created instances for a given class in C#?

我有一个 class 将配置对象作为构造函数的参数,然后使用该配置在构造函数中创建新对象。那么一般来说,是否可以在没有显式依赖注入的情况下模拟新创建的对象?

代码的相关部分是:

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));
        }
    }
}

具体来说,我可以在构造函数的 foreach 循环中以某种方式模拟返回的新 StateObject 吗?

如果相关,我将 .NET Framework 4.7.2 与 Moq 4.10 一起使用

我不认为你可以在 C# 中模拟 new 运算符,但你可以稍微重构你的代码并将 StateObject 的创建移动到单独的 class (并创建一个接口)

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

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

然后你可以把它传递给一个Managerclass

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

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

这种方法允许您轻松地模拟 IStateObjectFactory 具有任何所需行为的界面。我认为如果不将这种依赖注入 Manager class.

是不可能的