模拟两种不同类型的相同界面

本文关键字:界面 同类型 两种 模拟 | 更新日期: 2023-09-27 18:24:13

我有一个接口IMyInterface,我正在使用moq进行单元测试。

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个处理程序,并且Handle方法正确地选择了要使用的处理程序:

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

问题是两个模拟对象都属于同一类型。有没有办法强制Moq生成两个不同类型的相同接口的mock?

模拟两种不同类型的相同界面

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

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

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

这允许您不实现用于mock的整个类,而是使用moq来创建动态mock。

您可以为该测试创建自己的mock实现。像

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