Joh*_*las 66 inheritance unit-testing interface moq
我想要做的是为I1构建一个moq - 这很好......但是在我测试的方法过程中使用这个模拟我需要将它转换为I2才能访问一些不在的属性I1
Interface I1
{ int AProperty{get;set;}}
Interface I2
{int AnotherProperty{get;set;}}
Run Code Online (Sandbox Code Playgroud)
然后我有一些对象
Class O1 : I1 {}
Run Code Online (Sandbox Code Playgroud)
和
Class O2 : O1 , I2 {}
Run Code Online (Sandbox Code Playgroud)
问题是,当我有一个I2实现对象的实例时,我可以将它转换为I1,以便访问通过该接口实现的方法.在代码中,这不是问题,并且每个标志都按预期工作.
在该类上编写单元测试时,唯一的问题就出现了.
接口还公开了一个名为GetNewInstance的方法,该方法返回一个初始化的实现对象实例,该实例对象被转换为IGetNewInstance接口...我通常可以模拟这个并使其自行返回(因此我继续使用模拟对象).
但是,当您尝试将此类型I2的返回对象转换为I1时,将引用空引用 - 这是有意义的,因为实现I2的模拟对象不会从继承I1的任何内容继承.
问题是我如何强制模拟对象同时从I1和I2继承?
Håv*_*d S 113
我理解你的方式,你想创建一个实现两个接口的模拟.使用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.
Run Code Online (Sandbox Code Playgroud)
现在,您可以设置期望,并使用你的模拟像平时使用实施这两个对象IFoo
和IBar
.
对于您的GetNewInstance
方法,您可以设置一个返回模拟本身的期望.
归档时间: |
|
查看次数: |
24493 次 |
最近记录: |