【问题标题】:FakeItEasy - Mock the return value during the call interceptionFakeItEasy - 在呼叫拦截期间模拟返回值
【发布时间】:2020-12-24 21:09:37
【问题描述】:

能否请您帮助我使用 fakeItEasy 高级用法。 我得到了将参数作为参数的方法(假设它称为“插入”)。这个参数填充了数据(很多)。 我想将此参数作为 "Insert" 的结果返回。

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);

它也不起作用。在调试中它并没有就此停止。可能根本没有调用它。

提前致谢。

【问题讨论】:

  • 它应该可以工作。显示更多代码。

标签: c# .net-core fakeiteasy


【解决方案1】:

正如 Alexander Petrov 所说,这应该可以,但是您的代码太简洁而无法确定。我将复制我已经在 FakeItEasy gitter 聊天中输入的答案:

您的代码有点简洁,所以我必须猜测一些细节。包含更多内容和/或准确描述发生的情况可能会更好,但是您的第二种方法对我来说听起来不错,尽管它比需要的复杂一点。我会自己编写这段代码:

A.CallTo(() => fake.Insert(A<TypeOfP>._).ReturnsLazily((TypeOfP p) => p));

其中TypeOfP 是参数的类型。这正是Return Values Calculated at Call Time 中描述的方法。

如果这对您不起作用,我要做的第一件事是确保您配置了正确的方法。您在参数列表中使用了正确的类型吗?是否存在Insert 的重载,它采用了您在生产代码中实际调用的更多(或更少)参数,因此实际上并未调用单参数版本(采用TypeOfP)?有时这很容易直观地检查,有时它可以帮助调试代码。

如果您能够提供更多测试和生产代码,或者至少是方法签名,如果您仍然遇到困难,我们也许可以提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多