Moq:对不返回值的方法进行方法调用后的回调

时间:2015-02-25 18:08:59

标签: c# unit-testing moq

我目前正在使用Moq库进行单元测试。 Moq使我能够在模拟对象上注册之前的 之后的回调:

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

但是,如果 MyMethod 没有返回值(即它有一个 void 返回类型),那么我只能像这样设置一个Callback:

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

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

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

1 个答案:

答案 0 :(得分:4)

这是不可能的。

Callback的返回值是IReturnsThrows,它是IReturns接口与Returns方法的组合,IThrows接口与Throws方法的组合。您可以使用Returns关注Callback,因为Returns的返回值为IReturnResult,后者实现了ICallback

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