FakeItEasy 属性 没有更新
FakeItEasy Property doesnt get updated
我第一次使用 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(和其他模拟框架)只能拦截虚拟成员。因此,如果 属性 设置为 true 后仍然为 false,那一定是因为它在 MyObject
中的实现方式。这里根本不涉及 FakeItEasy。
至于这个:
A.CallToSet(() => @object.MyBooleanProperty).To(true);
它只是表示“当 MyBooleanProperty
在 @object
上设置为真时。它不执行任何操作,因为您没有指定行为(Invokes
、Throws
, CallsBaseMethod
...)。为了帮助检测此类问题,请考虑使用 FakeItEasy.Analyzer (available on NuGet),它将提醒您未使用的调用规范和其他常见错误。
此外,A.CallToSet
仅用于配置属性setter。如果要配置 getter,则应使用 A.CallTo(() => @object.MyBooleanProperty)
。但是无论如何,如果 属性 不是虚拟的,它就无法工作,正如您已经注意到的那样。
我第一次使用 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(和其他模拟框架)只能拦截虚拟成员。因此,如果 属性 设置为 true 后仍然为 false,那一定是因为它在 MyObject
中的实现方式。这里根本不涉及 FakeItEasy。
至于这个:
A.CallToSet(() => @object.MyBooleanProperty).To(true);
它只是表示“当 MyBooleanProperty
在 @object
上设置为真时。它不执行任何操作,因为您没有指定行为(Invokes
、Throws
, CallsBaseMethod
...)。为了帮助检测此类问题,请考虑使用 FakeItEasy.Analyzer (available on NuGet),它将提醒您未使用的调用规范和其他常见错误。
此外,A.CallToSet
仅用于配置属性setter。如果要配置 getter,则应使用 A.CallTo(() => @object.MyBooleanProperty)
。但是无论如何,如果 属性 不是虚拟的,它就无法工作,正如您已经注意到的那样。