这是情景:
interface IFather
{
void A();
}
interface ISonA : IFather
{
void B();
}
我有一个IFather的默认实现
private class Father : IFather
{
public void A()
{
//default behaviour
}
}
是否可以使用Father提供的默认行为来模拟ISonA(或任何其他实现IFather的ISon)?我想做这样的事情:
var mock = new Mock<ISonA>(typeof(Father));
//with A nothing, use default behaviour
//mock.Setup(x => x.A()).Callback(() => /*something*/);
mock.Setup(x => x.B()).Callback(() => /*something*/);
typeof(父亲)是告诉Mock在内部实施ISonA扩展父亲的方法。目前实现这一目标的唯一方法是使用我自己的SonA类而不是模拟它
答案 0 :(得分:0)
我找到了解决方案!模拟应该像这样创建:
var mock = new Mock<Father>().As<ISonA>();
通过这种方式,我继承了父的实现并同时获得了一个ISonA模拟
答案 1 :(得分:0)
最后我得到了解决方案。上一个示例需要一些修复。最后显示完整的代码。 1º方法A()必须在父类中标记为虚拟。 必须使用属性CallBase = true
配置2ºmockpublic interface IFather
{
int A();
}
public interface ISon : IFather
{
int B();
}
public class Father : IFather
{
public virtual int A()
{
return 1;
}
}
测试代码
var mock = new Mock<Father>().As<ISon>();
mock.CallBase = true;