0

私は依存性の注入と制御の反転にNinjectを使用しており、テスト目的でMoqを非常にうまく使用しています。しかし、最近、Ninjectのファクトリエクステンションを使い始める必要がある立場になりました。

私は次の行に沿ってコードを持っています:

interface IBarFactory
{
    Bar CreateBar();
}

class Bar : IBar
{
    ...
}

class BarModule
{
    public override void Load()
    {
        Bind<IBarFactory>().ToFactory();
    }
}

class Tests
{
    [Fact]
    public void TestMethod()
    {
        var bar = new Mock<IBar>();
        bar.Setup(b => b.DoSomething())
            .Verifiable();

        var barFactory = new Mock<IBarFactory>();
        cryptoKeyFactoryMock.Setup(f => f.CreateBar())
            .Returns(bar.Object)
            .Verifiable();

        var someOtherClass = new SomeOtherClass(barFactory.Object);
    }
}

IBarFactoryモックにIBarモックオブジェクトを返そうとすると、CreateBar()メソッドがIBarタイプのオブジェクトではなくBarタイプのオブジェクトを予期しているため、エラーが発生します。

Ninject FactoryでMoqを使用して、より多くの成功を収めた人はいますか?

4

1 に答える 1

3

問題は特にNinjectであるとは思いませんが、テスト専用のインターフェイスを宣言しているようです。BarFactoryがIBarを返さない理由はありますか?

Moqは、インターフェースだけでなく、クラスをモックすることができます。モックされたBarFactory呼び出しが戻るようにMock<Bar>インスタンスを設定できます。注意点は、モックバーインスタンスでアサートするメソッド/プロパティはすべて仮想として宣言する必要があるということです。したがって、この例では、DoSomething()を仮想として宣言すると、IBarの代わりに宣言を使用してタイプBarのモックを設定できます。

于 2012-07-17T00:49:40.760 に答える