将相同的界面模拟为 2 种不同的类型

Mock same interface as 2 different types

我有一个接口 IMyInterface,我正在使用最小起订量进行单元测试。

Mock<IMyInterface> firstMockedObject = new Mock<IMyInterface>();
Mock<IMyInterface> secondMockedObject = new Mock<IMyInterface>();

被测单元有一个注册方法,如下所示:

public void RegisterHandler(Type type, IHandler handler)

然后是句柄方法:

public void Handle(IMyInterface objectToHandle)

我要测试的是,我可以为 IMyInterface 的 2 种不同实现注册 2 个处理程序,并且 Handle 方法正确选择要使用的处理程序:

UnitUnderTest.RegisterHAndler(firstMockedObject.Object.GetType(), handler1);
UnitUnderTest.RegisterHAndler(seconMockedObject.Object.GetType(), handler2);

问题是两个模拟对象的类型相同。有什么方法可以强制 Moq 生成 2 个相同接口的模拟作为不同类型?

您可以为此测试创建自己的模拟实现。 喜欢

public class MockOne : IMyInterface {}
public class MockTwo : IMyInterface {}

创建两个从您的界面派生的界面。将它们用于模拟。每个的类型将是模拟接口类型:

public interface IMockOne : IMyInterface { };
public interface IMockTwo : IMyInterface { };


var firstMockedObject = new Mock<IMockOne>();
var secondMockedObject = new Mock<IMockTwo>();

这使您不必为模拟实现整个 class,而是使用 moq 创建动态模拟。