gpt4 book ai didi

c# - FakeItEasy 属性未更新

转载 作者:太空狗 更新时间:2023-10-30 01:15:08 25 4
gpt4 key购买 nike

我第一次使用 FakeItEasy模拟一个复杂的数据结构。当模拟一个对象并像这样设置一个属性时,属性不会得到更新。它永远是假的。

var @object = A.Fake<MyObject>();
@object.MyBooleanProperty= true;

阅读 FakeItEasy 上的文档,一个例子表明这是可以做到的:

var @object= A.Fake<MyObject>();
A.CallToSet(() => @object.MyBooleanProperty).To(true);

这里的问题是该属性没有标记为虚拟,这将抛出一个 FakeConfiguredException 消息:

The current proxy generator can not intercept the specified method for the following reason:
- Non virtual methods can not be intercepted.

关于如何实现这一点有什么想法吗?提前致谢。

最佳答案

如果属性不是虚拟的,执行 @object.MyBooleanProperty= true 将只调用 MyObject 实现,因为 FakeItEasy(和其他模拟框架)只能拦截虚拟成员(member)。因此,如果属性在设置为 true 后仍然为 false,那一定是因为它在 MyObject 中的实现方式。这里根本不涉及 FakeItEasy。

至于这个:

A.CallToSet(() => @object.MyBooleanProperty).To(true);

它只是表示“当 @object 上的 MyBooleanProperty 设置为 true 时。它什么都不做,因为您没有指定行为( InvokesThrowsCallsBaseMethod…)。为了帮助检测此类问题,请考虑使用 FakeItEasy.Analyzer(可用 on NuGet),它会发出警报未使用的调用规范和其他常见错误。

此外,A.CallToSet 仅用于配置属性setter。如果你想配置 getter,你应该使用 A.CallTo(() => @object.MyBooleanProperty)。但无论如何,如果属性(property)不是虚拟的,它就无法工作,正如您已经注意到的那样。

关于c# - FakeItEasy 属性未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739897/

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