gpt4 book ai didi

c# - Moq:在对不返回值的方法进行方法调用后回调

转载 作者:行者123 更新时间:2023-11-30 15:26:47 30 4
gpt4 key购买 nike

我目前正在使用 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 返回类型),那么我只能像这样设置一个回调:

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

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

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

最佳答案

这不可能。

Callback的返回值是IReturnsThrows,它是IReturns接口(interface)与Returns方法的组合,和IThrowsThrows 方法的接口(interface)。您可以在 Returns 后面加上 Callback,因为 Returns 的返回值是 IReturnResult,它实现了 ICallback

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

关于c# - Moq:在对不返回值的方法进行方法调用后回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28726468/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com