FakeItEasy - 在呼叫拦截期间模拟 return 值
FakeItEasy - Mock the return value during the call interception
能否请您帮助我了解 fakeItEasy 的高级用法。
我得到了将参数作为参数的方法(假设它称为“插入”)。这个参数充满了数据(很多)。
我想 return 这个参数作为“插入”的结果。
object.Insert(A<T>._))
.Invokes(obj =>
{
var p = obj.GetArgument<T>(0);
---SET p AS a return value here--
}
类似的东西。
有可能吗?
我试过了
A.CallTo(() => obj.Insert(A<T>._)).ReturnsLazily((o) => o.GetArgument<T>(0);
也不行。在调试中它并没有就此停止。可能它根本没有被调用。
提前致谢。
正如 Alexander Petrov 所说,这应该可行,但您的代码过于简洁,无法确定。我会复制我已经在 FakeItEasy gitter 聊天中输入给你的答案:
你的代码有点简洁,所以有些细节我不得不猜测。最好包含更多内容,并且 or/describe 到底发生了什么,但是您的第二种方法对我来说听起来不错,尽管它比需要的要复杂一些。我会自己写这段代码:
A.CallTo(() => fake.Insert(A<TypeOfP>._).ReturnsLazily((TypeOfP p) => p));
其中 TypeOfP
是参数的类型。这正是 Return Values Calculated at Call Time.
中描述的方法
如果这对您不起作用,我要做的第一件事就是确保您配置的方法正确。您是否在参数列表中使用了正确的类型?是否有 Insert
的重载需要更多(或更少)您在生产代码中实际调用的参数,因此单参数版本(需要 TypeOfP
)实际上并不是叫什么?有时这很容易通过视觉检查,或者有时它可以帮助调试代码。
如果您能够提供更多的测试和生产代码,或者至少提供方法签名,如果您仍然遇到困难,我们可能会提供帮助。
能否请您帮助我了解 fakeItEasy 的高级用法。 我得到了将参数作为参数的方法(假设它称为“插入”)。这个参数充满了数据(很多)。 我想 return 这个参数作为“插入”的结果。
object.Insert(A<T>._))
.Invokes(obj =>
{
var p = obj.GetArgument<T>(0);
---SET p AS a return value here--
}
类似的东西。 有可能吗?
我试过了
A.CallTo(() => obj.Insert(A<T>._)).ReturnsLazily((o) => o.GetArgument<T>(0);
也不行。在调试中它并没有就此停止。可能它根本没有被调用。
提前致谢。
正如 Alexander Petrov 所说,这应该可行,但您的代码过于简洁,无法确定。我会复制我已经在 FakeItEasy gitter 聊天中输入给你的答案:
你的代码有点简洁,所以有些细节我不得不猜测。最好包含更多内容,并且 or/describe 到底发生了什么,但是您的第二种方法对我来说听起来不错,尽管它比需要的要复杂一些。我会自己写这段代码:
A.CallTo(() => fake.Insert(A<TypeOfP>._).ReturnsLazily((TypeOfP p) => p));
其中 TypeOfP
是参数的类型。这正是 Return Values Calculated at Call Time.
如果这对您不起作用,我要做的第一件事就是确保您配置的方法正确。您是否在参数列表中使用了正确的类型?是否有 Insert
的重载需要更多(或更少)您在生产代码中实际调用的参数,因此单参数版本(需要 TypeOfP
)实际上并不是叫什么?有时这很容易通过视觉检查,或者有时它可以帮助调试代码。
如果您能够提供更多的测试和生产代码,或者至少提供方法签名,如果您仍然遇到困难,我们可能会提供帮助。