この記事から質問を引用します(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));
}