我目前正在使用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!"));
如代码中所述,此调用在调用方法之前发生。在调用该方法之后,似乎没有任何其他选项可用于指定的第二个回调。
这可能吗?文档中似乎没有任何关于它的内容。我错过了什么吗?
答案 0 :(得分:4)
这是不可能的。
Callback
的返回值是IReturnsThrows,它是IReturns
接口与Returns
方法的组合,IThrows
接口与Throws
方法的组合。您可以使用Returns
关注Callback
,因为Returns
的返回值为IReturnResult
,后者实现了ICallback
。
你到底想要完成什么?示例中的回调实际上并不在调用方法之前和之后发生,它们只是在调用方法时按顺序执行。在计算返回值之前执行之前的回调,然后在之后完成之后的回调。没有必要连续两次回调,因为你可以将它们组合成一个回调。