我有一个接口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个模拟?
答案 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 {}