- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我第一次使用 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 时。它什么都不做,因为您没有指定行为( Invokes
、Throws
、CallsBaseMethod
…)。为了帮助检测此类问题,请考虑使用 FakeItEasy.Analyzer(可用 on NuGet),它会发出警报未使用的调用规范和其他常见错误。
此外,A.CallToSet
仅用于配置属性setter。如果你想配置 getter,你应该使用 A.CallTo(() => @object.MyBooleanProperty)
。但无论如何,如果属性(property)不是虚拟的,它就无法工作,正如您已经注意到的那样。
关于c# - FakeItEasy 属性未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739897/
当我尝试伪造委托(delegate)类型时,我得到 System.InvalidCastException [TestMethod] public void TestDelegateFake() {
我有一个包含如下成员的界面: void ExecuteSqlCommand(string procedureName, SqlParameter[] parameters); 我正在使用 FakeIt
我可以在 FakeIteasy CallTo 断言中使用表达式树作为参数约束吗? 在具有以下签名的接口(interface)上给定一个方法: interface IRepository { T
我需要验证是否使用特定类型的对象调用了方法 这是我要测试它被调用的方法的接口(interface): interface IPlayer { void Send(object message);
我最近尝试使用 FakeItEasy,但如果不解决许多怪癖,我无法从具体类创建 Fake。 我尝试了以下方法: public class MyObject { public MyObject(){}
可以 FakeItEasy使用 .NET 核心?我已经通过 NuGet 安装了它,但我无法在项目中将它引用为 using FakeItEasy因为它没有找到。我在 NuGet 依赖项下进行了检查,我将
我正在尝试为依赖依赖项的方法编写单元测试,该依赖项提供接受对象并修改它的方法,但不会在“新路径”上返回它,例如作为返回值或通过引用参数。 public class Product { publ
我刚开始使用 FakeItEasy,第一次尝试就卡住了。我想伪造的接口(interface)有这样的方法: byte[] ReadFileChunk(string path,int offset,in
我正在尝试伪造对带有 out 参数的方法的调用,其中包含带有一些基本逻辑的 ReturnsLazily。理想情况下,我可以根据 ReturnsLazily 通过 AssignsOutAndRefPar
我有一个具有以下签名的方法。 Foo GetFooById( int id, params string[] children ) 此方法在名为 IDal 的接口(interface)上定义。 在我的
我有一些代码,其中我有一个假的配置根。我想检查是否进行了设置配置值的调用。 var fakeConfigRoot = A.Fake(); //Do something that will set co
我在 Math 类中有一个名为 GetNumber() 的函数。我想在第一次调用时返回 1,在第二次调用时返回 2,依此类推。我在 Mockito 中做过这样的事情 when(mathObj.GetN
有什么方法可以检索插入到伪造类中的伪造对象吗? 例如 假设我有以下接口(interface) + 类; public interface IFakeable { void FakeYou();
我想像这样设置我的假货: A.CallTo(() => this.repository.Create(A._)).Returns(XYZ); 哪里XYZ与在 A._ 处插入的变量相同 所以如果Crea
我试图从 child 那里伪造对 parent 公共(public)虚拟验证方法的调用但没有成功(使用 FakeItEasy。我有一个基类可以验证类似命令类的简单命令(我减少了为简单起见的代码):
我有一个用 FakeItEasy v2.2.0 编写的单元测试。 测试测试一个方法,让调用它MethodA调用MethodB。 简单类: public class Foo { public v
我使用 fake 很容易为我的对象生成假货。现在我测试是否调用了假对象上的一些方法。问题是我希望每个单元测试都将假的状态重置回原始状态。 我需要这个,因为我为每个单元测试类生成了一次伪造,所以我需要以
看来以下代码的行为与我预期的不同: using FakeItEasy; using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass]
我在单元测试中使用 FakeItEasy 作为模拟框架。方法 fakeUserService.AddUser 被模拟为返回新的 MwbeUser 对象,方法 AddUser 中有一些非空值 A.Ca
我有一个类型依赖于通过通用方法执行查询的外部组件。这是正在播放的内容的简化版本: public class UnitUnderTest { private IQueryEngine _engi
我是一名优秀的程序员,十分优秀!