C# 嘲笑';新的();最小起订量约束
我想用类型签名测试一个函数C# 嘲笑';新的();最小起订量约束,c#,.net,unit-testing,moq,C#,.net,Unit Testing,Moq,我想用类型签名测试一个函数 public static void DoSomething<T>(T something) where T : class, IInterfaceA, IInterfaceB, new() publicstaticvoiddosomething(T something) 其中T:class,IInterfaceA,IInterfaceB,new() 它在内部使用new T() 我在为T创建模拟时遇到问题。多亏了另一个问题,我已经找到了解决问题
public static void DoSomething<T>(T something)
where T : class, IInterfaceA, IInterfaceB, new()
publicstaticvoiddosomething(T something)
其中T:class,IInterfaceA,IInterfaceB,new()
它在内部使用new T()
我在为T
创建模拟时遇到问题。多亏了另一个问题,我已经找到了解决问题的方法。但是,我无法创建满足new()
约束的模拟。如何使用最小起订量解决此问题?您有两种选择:
两者之间的选择取决于分割逻辑的难度,以及剩余代码是否有足够的“肉”在它里面,如果你愿意为一个可以伪造新的模拟框架付费,你不需要IMO-你可以创建一个虚拟类并在那里内部使用Moq-看看一旦你使用了新的,你就失去了与伪造的连接-顺便说一句:如果你使用
new
而不是new()
constraint,您应该在DoSomething()
中添加一个Func create
参数,并调用该参数来创建对象,而不是新建它。确切地说,如何创建对象不是DoSomething()
应该知道的事情。DoSomething
是一种静态方法,因此您不能使用moq
来伪造它。。。您模拟new()
约束的努力毫无价值……@OldFox他试图测试它,而不是模拟它。这似乎是模拟比测试代码复杂得多的实例之一。。。我建议重新考虑设计……你是对的。本质上,我正在滥用new()
约束来避免更显式的解决方案——传递构造函数。