Mocking the 'new()' constraint with Moq

本文关键字:constraint with Moq new the Mocking | 更新日期: 2023-09-27 18:12:52

我想测试一个带有类型签名的函数

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

在内部使用new T()

我在为T创建模拟时遇到问题。由于另一个问题,我已经找到了模拟多个接口的解决方案。然而,我无法创建一个模拟满足new()约束。如何使用Moq解决这个问题?

Mocking the 'new()' constraint with Moq

您有两个选择:

  1. 使用无约束模拟框架。在。net中,它意味着隔离器或JustMock。两者都使用IL编织在运行时注入代码,并且可以伪造/模拟在生产代码中创建的对象。
  2. 拆分DoSomething逻辑,并使用依赖注入,而不是将对象创建为逻辑的一部分。

两者之间的选择取决于分割逻辑的困难程度,剩余的代码是否有足够的"内容",以及您是否愿意为可以伪造

的mock框架付费。