我有一个接口(interface) IMyInterface
,我正在使用 moq 在单元测试中模拟它。
Mock<IMyInterface> firstMockedObject = new Mock<IMyInterface>();
Mock<IMyInterface> secondMockedObject = new Mock<IMyInterface>();
被测单元有一个注册方法,如下所示:
public void RegisterHandler(Type 类型, IHandler 处理程序)
然后是句柄方法:
public void Handle(IMyInterface objectToHandle)
我要测试的是,我可以为 IMyInterface
的 2 个不同实现注册 2 个处理程序,并且 Handle 方法正确选择要使用的一个:
UnitUnderTest.RegisterHAndler(firstMockedObject.Object.GetType(), handler1);
UnitUnderTest.RegisterHAndler(seconMockedObject.Object.GetType(), handler2);
问题是两个模拟对象属于同一类型。有什么方法可以强制 Moq 生成 2 个相同接口(interface)的模拟作为不同类型?
最佳答案
创建两个从您的界面派生的界面。将它们用于模拟。每一个的类型都是模拟接口(interface)类型:
public interface IMockOne : IMyInterface { };
public interface IMockTwo : IMyInterface { };
var firstMockedObject = new Mock<IMockOne>();
var secondMockedObject = new Mock<IMockTwo>();
这使您无需为模拟实现整个类,而是使用 moq
创建动态模拟。
关于c# - 将相同的界面模拟为 2 种不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898243/