模拟两种不同类型的相同界面
本文关键字:界面 同类型 两种 模拟 | 更新日期: 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 {}