使用 FakeItEasy,有没有办法伪造只写属性的 setter?

Kev*_*ood 5 c# fakeiteasy

使用 FakeItEasy,有没有办法伪造只写属性的 setter?

我必须使用的界面类似于:

Interface IMyInterface
{
   String Foo { set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但语法不起作用。

IMyInterface _myObject = A.Fake<IMyInterface>();
A.CallTo(() => _myObject.Foo).Invokes((String foo) => {
   //save off foo
});
Run Code Online (Sandbox Code Playgroud)

我也试过这个,但语法错误。

IMyInterface _myObject = A.Fake<IMyInterface>();
A.CallTo(() => _myObject.set_Foo).Invokes((String foo) => {
   //save off foo
});
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 5

您可以这样做,但由于表达式树的限制(您不能在表达式中编写赋值),这不是很简单。解决方法是使用“高级”调用配置语法(在文档中描述):

A.CallTo(_myObject)
 .Where(call => call.Method.Name == "set_Foo")
 .Invokes((String foo) => {
   //save off foo
 });
Run Code Online (Sandbox Code Playgroud)

话虽如此,拥有只写属性可能不是一个好主意。如果你可以设置它,你应该也能得到它。如果您真的希望它是只写的,请考虑使用方法而不是属性。