我正在使用FakeItEasy检查是否已调用对属性的公共setter方法的调用。
该属性名为Description
,目前我正在测试它:
A.CallTo(model)
.Where(x => x.Method.Name.Equals("set_Description"))
.WithAnyArguments()
.MustHaveHappened();
这在功能上有效,但是使用魔术字符串作为方法名称的缺点是,如果我重构属性的名称,测试将失败,我将不得不手动更改所有测试中的字符串。 / p>
理想情况下,我想知道一种方法,就像在这段伪代码中一样:
var setterName = model.GetType()
.SelectProperty(x => x.Description)
.GetSetterName();
A.CallTo(model)
.Where(x => x.Method.Name.Equals(setterName))
.WithAnyArguments()
.MustHaveHappened();
这样,如果我右键单击重构Description
属性,则不需要更新测试。我怎么能这样做?
答案 0 :(得分:3)
您的伪代码在正确的轨道上。
var setterName = model.GetType()
.GetProperty(nameof(Description))
.GetSetMethod();
请注意,nameof
仅适用于C#6。
答案 1 :(得分:2)
我认为您可以使用gl.requestLayout()
关键字执行此操作:
https://msdn.microsoft.com/en-us/library/dn986596.aspx
所以我猜它会像
nameof
答案 2 :(得分:1)
请注意,从FakeItEasy 2.0.0开始,如果setter也有getter,你可以使用新的A.CallToSet method:
A.CallToSet(() => model.Description).MustHaveHappened();