使用 FakeItEasy,有没有办法伪造只写 属性 的 setter?
Using FakeItEasy, is there a way to fake the setter of a write only property?
使用 FakeItEasy,有没有办法伪造只写 属性 的 setter?
我必须使用的界面类似于:
Interface IMyInterface
{
String Foo { set; }
}
我试过以下方法,但语法不起作用。
IMyInterface _myObject = A.Fake<IMyInterface>();
A.CallTo(() => _myObject.Foo).Invokes((String foo) => {
//save off foo
});
这个我也试过了,但是语法错误。
IMyInterface _myObject = A.Fake<IMyInterface>();
A.CallTo(() => _myObject.set_Foo).Invokes((String foo) => {
//save off foo
});
你可以做到,但它不是很简单,因为表达式树的限制(你不能在表达式中写赋值)。解决方法是使用 "advanced" 调用配置语法(描述 in the docs):
A.CallTo(_myObject)
.Where(call => call.Method.Name == "set_Foo")
.Invokes((String foo) => {
//save off foo
});
也就是说,只写 属性 可能不是一个好主意;如果你能设置它,你应该也能得到它。如果您真的希望它是只写的,请考虑使用方法而不是 属性.
FakeItEasy 添加了一种方法来处理这种情况,A.CallToSet
IMyInterface _myObject = A.Fake<IMyInterface>();
// Variant 1
A.CallToSet(() => _myObject.Foo).Invokes(call => {
var foo = call.GetArgument<string>(0);
// save off foo
});
// Variant 2
A.CallToSet(() => _myObject.Foo).Invokes((string foo) => {
// save off foo
});
使用 FakeItEasy,有没有办法伪造只写 属性 的 setter?
我必须使用的界面类似于:
Interface IMyInterface
{
String Foo { set; }
}
我试过以下方法,但语法不起作用。
IMyInterface _myObject = A.Fake<IMyInterface>();
A.CallTo(() => _myObject.Foo).Invokes((String foo) => {
//save off foo
});
这个我也试过了,但是语法错误。
IMyInterface _myObject = A.Fake<IMyInterface>();
A.CallTo(() => _myObject.set_Foo).Invokes((String foo) => {
//save off foo
});
你可以做到,但它不是很简单,因为表达式树的限制(你不能在表达式中写赋值)。解决方法是使用 "advanced" 调用配置语法(描述 in the docs):
A.CallTo(_myObject)
.Where(call => call.Method.Name == "set_Foo")
.Invokes((String foo) => {
//save off foo
});
也就是说,只写 属性 可能不是一个好主意;如果你能设置它,你应该也能得到它。如果您真的希望它是只写的,请考虑使用方法而不是 属性.
FakeItEasy 添加了一种方法来处理这种情况,A.CallToSet
IMyInterface _myObject = A.Fake<IMyInterface>();
// Variant 1
A.CallToSet(() => _myObject.Foo).Invokes(call => {
var foo = call.GetArgument<string>(0);
// save off foo
});
// Variant 2
A.CallToSet(() => _myObject.Foo).Invokes((string foo) => {
// save off foo
});