gpt4 book ai didi

c# - 如何独立于模拟框架使用 Machine.Fakes 模拟 'out' 参数?

转载 作者:行者123 更新时间:2023-11-30 19:02:50 24 4
gpt4 key购买 nike

我遇到了 Machine.Fakes 的僵局。我不知道如何模拟 out参数使用 Machine.Fakes 设备。因为a bug在 RhinoMocks 中,我将 mfakes 适配器切换为 FakeItEasy。据我所知,任何适配器都应该可以互换。

问题是这导致“out”测试失败,看起来像这样的东西不再编译,因为Arg是 Rhino.Mocks。

The<IMembershipService>()
.WhenToldTo(x => x.CreateUser(Param<string>.IsAnything,
Param<bool>.IsAnything,
Param<object>.IsAnything,
out Arg<MembershipCreateStatus>
.Out(MembershipCreateStatus.UserRejected)
.Dummy))
.Return(user);

我尝试使用“虚拟”局部变量,将其设置为与原始 Arg<T> 相同的值param 将它设置为,但这导致我的测试失败——似乎该值没有被传递! Arg<T>确实有解决方案,但我不能再使用它了,因为它是 Rhino.Mocks 的一部分。

最佳答案

Machine.Fakes 不处理这种情况。它根本没有实现。

我个人不使用 out 参数,并且(如果我真的需要返回多个返回值)在这种情况下使用元组 (Tuple ) 或自定义类。这就是为什么它从来没有真正放在我的优先级上。

我没有研究它,但在 Machine.Fakes 中实现 ref 和 out 参数的处理可能是不可行的。在多个模拟框架之上实现包装器的挑战之一是,为了成功,所有模拟框架都需要在它们的工作方式上有一个共同点。 Machine.Fakes 现在也不支持模拟事件,因为我无法找到所有这些事件的共同点(仅针对两个 NSubstitute/FakeItEasy 与 Rhino/Moq)。

在我看来,您目前有两个选择:

  1. 如果您控制我们正在讨论的界面,则可以通过元组或自定义类绕过该问题。
  2. 如果您不拥有该接口(interface),您始终可以针对 Alexander Gross 建议的情况恢复到底层模拟框架。

很抱歉没有给你更好的答案;-)

  • 比约恩

关于c# - 如何独立于模拟框架使用 Machine.Fakes 模拟 'out' 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720423/

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