使用 Moq 模拟 'new()' 约束

Mocking the 'new()' constraint with Moq

我想用类型签名测试一个函数

public static void DoSomething<T>(T something)
    where T : class, IInterfaceA, IInterfaceB, new()

内部使用 new T()

我在为 T 创建模拟时遇到问题。感谢另一个问题,我已经找到了 mocking multiple interfaces 的解决方案。但是,我无法创建满足 new() 约束的模拟。我如何使用最小起订量解决这个问题?

您有两个选择:

  1. 使用无约束模拟框架。在 .NET 中,它表示 Isolator 或 JustMock。两者都使用 IL 编织在运行时注入代码,并且可以 fake/mock 在生产代码中创建的对象。
  2. 拆分 DoSomething 逻辑并使用依赖注入而不是创建对象作为逻辑的一部分。

在两者之间做出选择取决于拆分逻辑的难易程度、剩余代码是否足够 "meat" 以及您是否愿意为可以伪造的 Mocking 框架付费