[英]Get method name of property setter in c#
我正在使用FakeItEasy來檢查是否已調用對屬性的公共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
屬性,則不需要更新測試。 我怎樣才能做到這一點?
您的偽代碼在正確的軌道上。
var setterName = model.GetType()
.GetProperty(nameof(Description))
.GetSetMethod();
請注意, nameof
僅在C#6中可用。
我認為您可以使用nameof
關鍵字來做到這一點: https : nameof
所以我想那會是
.Where(x => x.Method.Name.Equals("set_" + nameof(x.Description))
請注意,從FakeItEasy 2.0.0開始,如果setter也具有getter,則可以使用新的A.CallToSet方法 :
A.CallToSet(() => model.Description).MustHaveHappened();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.