是否可以在 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);
}
}
然后你可以把它传递给一个Manager
class
public Manager(List<Config> configList, IStateObjectFactory factory)
{
_configList = configList;
foreach (var config in _configList)
{
_stateObjectList.Add(factory.Create(config));
}
}
这种方法允许您轻松地模拟 IStateObjectFactory
具有任何所需行为的界面。我认为如果不将这种依赖注入 Manager
class.
是不可能的
我有一个 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);
}
}
然后你可以把它传递给一个Manager
class
public Manager(List<Config> configList, IStateObjectFactory factory)
{
_configList = configList;
foreach (var config in _configList)
{
_stateObjectList.Add(factory.Create(config));
}
}
这种方法允许您轻松地模拟 IStateObjectFactory
具有任何所需行为的界面。我认为如果不将这种依赖注入 Manager
class.