在c#中获取属性 setter的方法名
Get method name of property setter in c#
我正在使用 FakeItEasy 检查是否调用了 属性 的 public setter 方法。
属性被称为Description
,目前我是这样测试的:
A.CallTo(model)
.Where(x => x.Method.Name.Equals("set_Description"))
.WithAnyArguments()
.MustHaveHappened();
这在功能上有效,但是使用魔术字符串作为方法名称的缺点是,如果我重构 属性 的名称,测试将失败,我将不得不手动更改中的字符串所有测试。
理想情况下,我想知道一种方法,就像在这段伪代码中那样:
var setterName = model.GetType()
.SelectProperty(x => x.Description)
.GetSetterName();
A.CallTo(model)
.Where(x => x.Method.Name.Equals(setterName))
.WithAnyArguments()
.MustHaveHappened();
这样,如果我右键单击重构 Description
属性,则不需要更新测试。我该怎么做?
我想你可以用 nameof
关键字来做到这一点:
https://msdn.microsoft.com/en-us/library/dn986596.aspx
所以我想应该是这样的
.Where(x => x.Method.Name.Equals("set_" + nameof(x.Description))
你的伪代码是正确的。
var setterName = model.GetType()
.GetProperty(nameof(Description))
.GetSetMethod();
请注意,nameof
仅在 C# 6 中可用。
请注意,从 FakeItEasy 2.0.0 开始,如果 setter 也有 getter,您可以使用新的 A.CallToSet method:
A.CallToSet(() => model.Description).MustHaveHappened();
我正在使用 FakeItEasy 检查是否调用了 属性 的 public setter 方法。
属性被称为Description
,目前我是这样测试的:
A.CallTo(model)
.Where(x => x.Method.Name.Equals("set_Description"))
.WithAnyArguments()
.MustHaveHappened();
这在功能上有效,但是使用魔术字符串作为方法名称的缺点是,如果我重构 属性 的名称,测试将失败,我将不得不手动更改中的字符串所有测试。
理想情况下,我想知道一种方法,就像在这段伪代码中那样:
var setterName = model.GetType()
.SelectProperty(x => x.Description)
.GetSetterName();
A.CallTo(model)
.Where(x => x.Method.Name.Equals(setterName))
.WithAnyArguments()
.MustHaveHappened();
这样,如果我右键单击重构 Description
属性,则不需要更新测试。我该怎么做?
我想你可以用 nameof
关键字来做到这一点:
https://msdn.microsoft.com/en-us/library/dn986596.aspx
所以我想应该是这样的
.Where(x => x.Method.Name.Equals("set_" + nameof(x.Description))
你的伪代码是正确的。
var setterName = model.GetType()
.GetProperty(nameof(Description))
.GetSetMethod();
请注意,nameof
仅在 C# 6 中可用。
请注意,从 FakeItEasy 2.0.0 开始,如果 setter 也有 getter,您可以使用新的 A.CallToSet method:
A.CallToSet(() => model.Description).MustHaveHappened();