Moq调用了一名代表

Lir*_*ess 33 c# delegates unit-testing moq

我得到了一个通过参数得到代表的类.这个类调用该委托,我想用Moq对它进行单元测试.我如何验证这个方法被调用?

示例类:

public delegate void Foo(int number);

public class A
{
   int a = 5;

   public A(Foo myFoo)
   {
      myFoo(a);
   }
}
Run Code Online (Sandbox Code Playgroud)

我想检查Foo是否被调用.谢谢.

Luk*_*oid 51

此提交时, Moq现在支持代理模拟,对于您的情况,您可以这样做:

var fooMock = new Mock<Foo>();
var a = new A(fooMock.Object);
Run Code Online (Sandbox Code Playgroud)

然后,您可以验证是否已调用委托:

fooMock.Verify(f => f(5), Times.Once);
Run Code Online (Sandbox Code Playgroud)

要么:

fooMock.Verify(f => f(It.IsAny<int>()), Times.Once);
Run Code Online (Sandbox Code Playgroud)


Ufu*_*arı 32

那么使用匿名函数呢?它可以像内联模拟一样,你不需要一个模拟框架.

bool isDelegateCalled = false;
var a = new A(a => { isDelegateCalled = true});

//do something
Assert.True(isDelegateCalled);
Run Code Online (Sandbox Code Playgroud)

  • @rsenna 如果您阅读下面的答案,您会发现当我发布答案时,Moq 不支持它。我为 OP 试图做的验证提供了一个解决方案。 (2认同)