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

时间:2015-11-24 15:57:09

标签: c# unit-testing mocking moq

我有一个接口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种不同实现设置2个处理程序,并且Handle方法正确选择要使用的处理程序:

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

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

2 个答案:

答案 0 :(得分:7)

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

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


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

这允许您不要实现整个类进行模拟,而是使用moq来创建动态模拟。

答案 1 :(得分:1)

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

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