Moq:在对没有 return 值的方法调用方法后回调
Moq: Callback after method invocation on a method that does not return a value
我目前正在使用 Moq 库进行单元测试。 Moq 使我能够在模拟对象上注册回调 before 和 after 方法调用,如下所示:
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 回调。连续执行两个回调没有意义,因为您可以将它们组合成一个回调。
我目前正在使用 Moq 库进行单元测试。 Moq 使我能够在模拟对象上注册回调 before 和 after 方法调用,如下所示:
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 回调。连续执行两个回调没有意义,因为您可以将它们组合成一个回调。