C# – Verifying a delegate was called with Moq

cdelegatesmoqunit testing

i got a class that gets by argument a delegate.
This class invokes that delegate, and i want to unit test it with Moq.
how do i verify that this method was called ?

example class :

public delegate void Foo(int number);

public class A
{
   int a = 5;

   public A(Foo myFoo)
   {
      myFoo(a);
   }
}

and I want to check that Foo was called.
Thank you.

Best Answer

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);