Moq:在对没有 return 值的方法调用方法后回调

Moq: Callback after method invocation on a method that does not return a value

我目前正在使用 Moq 库进行单元测试。 Moq 使我能够在模拟对象上注册回调 beforeafter 方法调用,如下所示:

Mock<IMyClass> mock = new Mock<IMyClass>();
mock.Setup(o => o.MyMethod())
  .Callback(() => Console.WriteLine("BEFORE!"))
  .Returns(true)
  .Callback(() => Console.WriteLine("AFTER!"));

但是,如果 MyMethod 没有 return 值(即它有一个 void return 类型), 然后我只能像这样设置一个回调:

mock.Setup(o => o.MyMethod())
  .Callback(() => Console.WriteLine("BEFORE!"));

如代码中所述,此回调发生在调用方法之前。似乎没有任何其他选项可以在调用方法后为指定第二个回调。

这可能吗?文档中似乎没有关于它的任何内容。我错过了什么吗?

这不可能。

Callback的return值为IReturnsThrows,是IReturns接口与Returns方法的组合,IThrows接口与Throws 方法。您可以在 Returns 后面加上 Callback,因为 Returns 的 return 值是 IReturnResult,它实现了 ICallback.

你到底想完成什么?您的示例中的回调实际上并没有在调用方法之前和之后发生,它们只是在调用方法时按步骤顺序执行。在计算 return 值之前执行您的 before 回调,然后在此之后完成您的 after 回调。连续执行两个回调没有意义,因为您可以将它们组合成一个回调。