38

この記事 ( How to moq a Func ) から質問を受け取り、答えが正しくないため、それを適応させました。

public class FooBar
{
    private Func<IFooBarProxy> __fooBarProxyFactory;

    public FooBar(Func<IFooBarProxy> fooBarProxyFactory)
    {
        _fooBarProxyFactory = fooBarProxyFactory;
    }

    public void Process() 
    {
        _fooBarProxyFactory();
        _fooBarProxyFactory();
    }
}

コンストラクターのパラメーターとして渡される Func<> をモックする必要があり、func が 2 回呼び出されたことをアサートします。

var funcMock = new Mock<Func<IFooBarProxy>>();Moq が発生させる関数をモックしようとすると、 Func 型がモック可能ではないため、例外が発生します。

問題は、func をモックしないと、func が (n) 回呼び出されたことを確認できないことです。funcMock.Verify( (), Times.AtLeast(2));

4

3 に答える 3

40

Func にモックを使用する必要はないと思います。

のモックを返す通常の Func を自分で簡単に作成できますIFooBarProxy

int numberOfCalls = 0;
Func<IFooBarProxy> func = () => { ++numberOfCalls;
                                  return new Mock<IFooBarProxy>(); };

var sut = new FooBar(func);

sut.Process();

Assert.Equal(2, numberOfCalls);
于 2013-02-06T12:45:11.543 に答える