0

これがシナリオです:

interface IFather
{
    void A();
}

interface ISonA : IFather
{
    void B();
}

そして私はIFatherのデフォルトの実装を持っています

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

父によって提供されたデフォルトの動作で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(Father)は、MockにISonA拡張Fatherを内部的に実装するように指示する方法です。現在、これを実現する唯一の方法は、自分のSonAクラスをモックする代わりに使用することです。

4

2 に答える 2

0

私は解決策を見つけました!モックは次のように作成する必要があります。

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

このようにして、私は父の実装を継承し、同時にISonAモックを取得します

于 2012-11-01T15:16:28.817 に答える
0

ついに私は解決策を得ました。前の例にはいくつかの修正が必要でした。最後に、完全なコードが表示されます。1ºメソッドA()は、クラスFatherで仮想としてマークする必要があります。2ºモックは、プロパティ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 に答える