Kev*_*aft 4 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!"));
Run Code Online (Sandbox Code Playgroud)
但是,如果MyMethod不返回值(即它有一个void返回类型),那么我只能像这样设置一个回调:
mock.Setup(o => o.MyMethod())
.Callback(() => Console.WriteLine("BEFORE!"));
Run Code Online (Sandbox Code Playgroud)
如代码中所述,此回调在调用方法之前发生。似乎没有任何其他选项可以在调用方法后指定第二个回调。
这可能吗?文档中似乎没有关于它的任何内容。我错过了什么吗?
这是不可能的。
的返回值Callback
是IReturnsThrows,这是的组合IReturns
与接口Returns
方法,以及IThrows
与接口Throws
方法。你可以跟在 a 后面Returns
,Callback
因为 的返回值Returns
is IReturnResult
which implements ICallback
。
你到底想完成什么?您示例中的回调实际上并没有在调用方法之前和之后发生,它们只是在调用方法时按步骤顺序执行。您的 before 回调在计算返回值之前执行,然后您的 after 回调在此之后完成。连续执行两个回调是没有意义的,因为您可以将它们组合成一个回调。