Verifying a delegate was called with Moq
You can do something like that:
public interface IWithFOOMethod
{
void FooAlikeMethod(int number);
}
Mock<IWithFOOMethod> myMock = new Mock<IWithFOOMethod>();
A a = new A(myMock.Object.FooAlikeMethod);
myMock.Verify(call => call.Foo(It.IsAny<int>()), Times.Once())
What about using an anonymous function? It can act like an inline mock here, you don't need a mocking framework.
bool isDelegateCalled = false;
var a = new A(a => { isDelegateCalled = true});
//do something
Assert.True(isDelegateCalled);
As of this commit Moq now supports the mocking of delegates, for your situation you would do it like so:
var fooMock = new Mock<Foo>();
var a = new A(fooMock.Object);
Then you can verify the delegate was invoked:
fooMock.Verify(f => f(5), Times.Once);
Or:
fooMock.Verify(f => f(It.IsAny<int>()), Times.Once);