最小起订量 – 如何模拟一个接口需要被转换到另一个接口?
我想要做的是构build一个moq为I1 – 这是很好的…但是在方法的过程中,我正在testing使用这个模拟我需要把它投到I2为了访问一些属性不是I1
Interface I1 { int AProperty{get;set;}} Interface I2 {int AnotherProperty{get;set;}}
然后我有一些物体
Class O1 : I1 {}
和
Class O2 : O1 , I2 {}
问题是当我有一个I2实现对象的实例时,我可以将它转换为I1,以便访问通过该接口实现的方法。 在代码中,这不是一个问题,everythign按预期工作。
在这个类上写unit testing时唯一的问题就出现了。
接口还公开了一个名为GetNewInstance的方法,该方法将实现对象的初始化实例返回到IGetNewInstance接口中…我通常可以嘲笑它并使其自身返回(所以我继续使用模拟对象)。
然而,当你试图把这个I2types的返回对象强制转换为I1时,会产生一个空引用结果 – 这是有道理的,因为实现I2的模拟对象并不inheritance任何inheritanceI1的对象。
问题是我怎样才能强制模拟对象同时从I1 I2 I2同时inheritance?
我理解你的方式,你想创build一个实现两个接口的模拟。 用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.
现在,您可以设置期望并使用您的模拟,就像您通常使用实现IFoo
和IBar
的对象IBar
。
对于你的GetNewInstance
方法,你可以设置一个返回模拟本身的期望值。