当前位置: 首页 > 编程语言 > C#

FakeItEasy代理方法调用实际实现Share

时间:2023-04-11 11:35:30 C#

FakeItEasy代理方法调用实际实现我正在尝试将对假对象的调用代理到实际实现。这样做的原因是我希望能够使用Machine.Specifications的WasToldTo和WhenToldTo,它们仅适用于接口类型的伪造。所以我正在执行以下操作来代理对我的真实对象的所有调用。publicstaticTFakeProxy(TFakefake,TInstanceinstance)whereTInstance:TFake{fake.Configure().AnyCall().Invokes(x=>x.Method.Invoke(instance,x.Arguments.ToArray()));返回假货;我会像这样使用它。varfake=Proxy(A.Fake(),newSomeImplementation());//在我使用Machine.Specifications的断言中(我需要一个伪造的接口的原因)fake.WasToldTo(x=>x.DoOperation());然而,问题是这只适用于void方法,因为Invokes方法不对返回值做任何事情。(Action参数而不是Func)然后我尝试使用WithReturnValue方法来执行此操作。publicstaticTFakeProxy(TFakefake,TInstanceinstance)其中TInstance:TFake{fake.Configure().AnyCall()..WithReturnType().Invokes(x=>x.Method.Invoke(instance,x.Arguments.ToArray()));fake.Configure().AnyCall()..WithReturnType().Invokes(x=>x.Method.Invoke(instance,x.Arguments.ToArray()));fake.Configure().AnyCall()..WithReturnType().Invokes(x=>x.Method.Invoke(instance,x.Arguments.ToArray()));//etc.returnfake;然而,Invokes方法仍然无法按照我想要的方式工作(仍然是Action而不是Func)。所以返回值还是没有用到。有没有办法用当前的最新版本实现这一目标?我已经在FakeItEasygithub存储库中提交了一个问题。https://github.com/FakeItEasy/FakeItEasy/issues/435从我在FakeItEasygithub存储库中的回复中窃取:您可以像这样创建一个假对象来包装现有对象:varwrapped=newFooClass("foo","bar");varfoo=A.Fake(x=>x.Wrapping(wrapped));(示例来自createfake>explicitcreateoption)这应该将所有调用委托给底层对象,通常注意任何重定向调用都必须是可覆盖的。我希望这有帮助。如果没有,请回来解释。也许我会更好地理解它。哦,请注意Configure机制。它在FakeItEasy2.0.0中消失了。首选成语是,以上是C#学习教程:FakeItEasy代理方法调用的实际实现,共享所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——A.CallTo(fake)。调用(...);//或A.CallTo(fake).WithReturnType(...);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: