如何模拟需要转换到另一个接口的接口?

我想要做的是为I1构建一个moq--这很好......但是在我正在测试的方法过程中,我使用这个模拟需要将它转换到I2,以便访问一些不属于I1

Interface I1 
{ int AProperty{get;set;}}

Interface I2
{int AnotherProperty{get;set;}}

然后我有一些物体

Class O1 : I1 {}

Class O2 : O1 , I2 {}

问题是,当我有一个I2实现对象的实例时,我可以将它转换为I1以便访问通过该接口实现的方法。 在代码中,这不是一个问题,每个符号都按预期工作。

在该类上编写单元测试时唯一的问题就出现了。

这些接口还公开了一个名为GetNewInstance的方法,该方法将实现对象的初始化实例返回到IGetNewInstance接口中...我通常可以嘲笑它并自行返回(因此我继续使用模拟对象)。

但是,当您尝试将此类返回的I2对象转换为I1时,会返回空引用结果 - 这是有道理的,因为实现I2的模拟对象不会从继承I1的任何对象继承。

问题是我如何强制模拟对象同时继承I1和I2?


我理解你的方式,你想创建一个实现两个接口的模拟器。 有了Moq,就像这样简单:

var mock = new Mock<IFoo>(); // Creates a mock from IFoo
mock.As<IBar>(); // Adds IBar to the mock
mock.As<IBar>().Setup(m => m.BarMethod()).Returns(new object()); // For setups.

现在,您可以设置期望并使用您的模拟,就像您通常使用实现IFooIBar的对象IBar

对于你的GetNewInstance方法,你可以设置一个返回模拟本身的期望值。

链接地址: http://www.djcxy.com/p/54053.html

上一篇: how to mock an interface that needs to be cast to another interface?

下一篇: using "sender" vs. custom EventArgs