使用FakeItEasy,如何获取设置在伪造对象上的属性值?

14

我将使用FakeItEasy来捕获一个虚拟对象上属性值的设置:

首先是接口:

interface ISomeInterface
{
    int MyProperty {get;set;}
}

接着是一个单元测试的片段:

var myObject = A.Fake<ISomeInterface>();

int saved = 0;
A.CallTo (() => myObject.MyProperty).Invokes (x => saved = ?????);

SomeMethod (myObject);
Assert.That (saved, Is.EqualTo (100));

并且拥有

void SomeMethod (ISomeInterface intf)
{
    intf.MyProperty = 100;
}

我不知道要用什么来替代那个????

1个回答

12
var myObject = A.Fake<ISomeInterface>();

SomeMethod (myObject);
Assert.That (saved.MyProperty, Is.EqualTo(100));

1
关于你回答的第二部分,我希望这个虚假对象实际上返回值100,以便使用该接口的其他类也会使用该值。我承认我的例子不够清晰。 ;) - Stécy
8
有两种方法,一种是 A.CallTo (() => myObject.MyProperty).Returns(100); 或者只需使用 myObject.MyProperty = 100;。 - Patrik Hägne
@Patrik Hägne,直接分配属性的第二个对我起作用。第一个:A.CallTo(() => dbVM.CreateFolderPath).Returns(somePath);给我返回了这个异常。当前代理生成器无法拦截指定的方法,原因如下:
  • 无法拦截非虚方法。
- VivekDev
1
@VivekDev,我猜你不是在伪造一个接口而是一个具体类。请确保在你伪造的类中将该属性设置为虚拟的。 - Patrik Hägne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接