【发布时间】:2015-09-16 08:16:25
【问题描述】:
我想用类型签名测试一个函数
public static void DoSomething<T>(T something)
where T : class, IInterfaceA, IInterfaceB, new()
在内部使用new T()。
我在为 T 创建模拟时遇到问题。感谢另一个问题,我已经找到了mocking multiple interfaces 的解决方案。但是,我无法创建满足 new() 约束的模拟。如何使用 Moq 解决这个问题?
【问题讨论】:
-
你没有 IMO - 你可以创建一个 Dummy 类并在内部使用 Moq - 一旦你使用 new 你就会失去与假货的联系 - 顺便说一句:这似乎有点如果你在那里使用
new会有一股气味 -
不要使用
new()约束,您应该将Func<T> create参数添加到DoSomething()并调用它来创建对象,而不是使用new来创建对象。究竟如何创建对象不是DoSomething()应该知道的。 -
DoSomething是一种静态方法,因此您将无法使用moq伪造它...您模拟new()约束的努力毫无价值.... -
@OldFox 他试图测试它,而不是模拟它。
-
这似乎是 mock 比测试代码复杂得多的实例之一......我建议重新考虑设计......
标签: c# .net unit-testing moq