簡體   English   中英

在C#中獲取屬性設置器的方法名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM