0

这是场景:

interface IFather
{
    void A();
}

interface ISonA : IFather
{
    void B();
}

我有一个默认的 IPather 实现

private class Father : IFather
{
    public void A()
    {
        //default behaviour
    }
}

是否可以使用父亲提供的默认行为来模拟 ISoA(或任何其他实现 IFather 的 ISo)?我想做这样的事情:

    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(Father) 是告诉 Mock 在内部实现 ISonA 扩展父亲的方式。目前实现这一目标的唯一方法是使用我自己的 SonA 类而不是模拟它

4

2 回答 2

0

最后我得到了解决方案。上一个示例需要一些修复。最后显示了完整的代码。1º 方法 A() 必须在父类中标记为虚拟。2º mock 必须使用属性 CallBase = true 进行配置

public 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;
于 2012-11-07T19:04:23.320 回答
0

我找到了解决方案!模拟应该像这样创建:

var mock = new Mock<Father>().As<ISonA>();

这样我继承了Father的实现,同时得到了一个ISonA mock

于 2012-11-01T15:16:28.817 回答