我有一个类,它接收一个配置对象作为构造函数的参数,然后在构造函数中使用该配置创建新的对象。那么一般情况下,是否可以在不显式依赖注入的情况下,对新创建的对象进行模拟?
相关的部分代码是。
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,如果相关的话。
我认为不能模拟 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
类。