Moq を使用して Func<> コンストラクタ パラメータをモックし、2 回呼び出されたことを確認する 質問する

Moq を使用して Func<> コンストラクタ パラメータをモックし、2 回呼び出されたことを確認する 質問する

この記事から質問を引用します(Funcをmoqする方法)と入力し、回答が正しくないため修正しました。

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>>();Func 型がモック可能ではないため、Moq は例外を発生させます。

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

ベストアンサー1

少なくとも Moq 4.5.28 では、期待どおりに Func をモックして検証できます。この機能がいつ追加されたかはわかりません (元の質問によると、ある時点では機能していなかったようです)。

[Test]
public void TestFoobar()
{
    var funcMock = new Mock<Func<IFooBarProxy>>();
    var fooBar = new FooBar(funcMock.Object);
    fooBar.Process();
    funcMock.Verify(x => x(), Times.AtLeast(2));
}

おすすめ記事