gpt4 book ai didi

c# - Rhino 模拟 - MethodInvocation.ReturnValue 与 IMethodOptions.Return

转载 作者:行者123 更新时间:2023-11-30 16:12:37 25 4
gpt4 key购买 nike

在玩 Rhino Mocks 时,我偶然发现了一种我无法理解的奇怪行为。

按照预期的方式设置我的 stub - 返回 42

var generator = MockRepository.GenerateStub<INumberGenerator>();
generator.Stub(x => x.GetNumber()).Return(42);

然后我尝试使用 WhenCalled(Action<MethodInvocation> action)扩展,到目前为止我只将其用于 void 函数:

generator.Stub(x => x.GetNumber()).WhenCalled(mi => mi.ReturnValue = 42);

此代码抛出异常 Method 'INumberGenerator.GetNumber();' requires a return value or an exception to throw. .好的,我已经添加了.Return(55) - 现在事情开始变得奇怪了:

generator.Stub(x => x.GetNumber()).WhenCalled(mi => mi.ReturnValue = 42).Return(55);

现在返回 42,而不是 55。请注意 MethodInvocation.ReturnValue 在添加 .Return(..) 时有效然后对返回值绝对没有影响的声明 - 这让我很困惑。谁能解释这种行为?

最佳答案

Rhino Mocks 要求您在 Expect() 链的末尾指定一个 Return() 调用(在您的情况下,当您为您的 stub ),从而判断返回结果的类型

因此,实际上,仅使用 WhenCalled() 中的返回值。 Returns() 中的任何值都可以(并且不会被使用)只要它是同一类型。

我认为文档中没有明确提及。

关于c# - Rhino 模拟 - MethodInvocation.ReturnValue 与 IMethodOptions.Return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22707018/

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