我在讀an article by Dino Esposito on how to test AsyncConrollers in ASP.NET MVC,在那裏他使用了「謙虛對象」模式,但沒有詳細描述。什麼是謙虛對象模式,什麼時候有用?
我沒有太多的運氣谷歌搜索周圍。
那麼,謙卑對象模式是什麼?它什麼時候有用?
我在讀an article by Dino Esposito on how to test AsyncConrollers in ASP.NET MVC,在那裏他使用了「謙虛對象」模式,但沒有詳細描述。什麼是謙虛對象模式,什麼時候有用?
我沒有太多的運氣谷歌搜索周圍。
那麼,謙卑對象模式是什麼?它什麼時候有用?
有a thorough description at xunitpatterns.com。基本上,你把所有的邏輯放到一個單獨的對象中,你可以很容易地測試 - 而你的「Humble Object」成爲你的可測試對象的包裝;這只是謙卑的對象也依賴於難以測試的東西,比如異步服務或GUI類。這個想法是在謙虛的對象中留下如此少量的實際邏輯,以至於你不需要測試它,所以不需要處理測試難以測試的依賴關係。
我通常會實現這種作爲Interface
這種 - 然後你可以使用一個模擬框架來存根測試,一個IoC框架在運行時注入正確的實現。
下面是從我目前的項目爲例:
public interface IUserInterface
{
string AskUserWhereToSaveFile(
string title,
FileType defaultFileType,
string defaultFileName = null,
params FileType[] otherOptions
);
string AskUserToSelectFileToLoad(
string title,
FileType defaultFileType,
params FileType[] fileTypes
);
void ShowError(string title, string details);
bool AskUserIfTheyWantToRetryAfter(string errorMessage);
}
我的控制器則對IUserInterface一個扶養,而不是一個具體的觀點,這讓我有一個用於測試的存根替換用戶交互。
如果我理解正確,你通常使用這種模式代碼,你沒有控制,所以使用接口wouldnt工作。 – Freek 2012-03-01 18:43:34
@Freek - 這就是我通常使用它的原因。我仍然有一個實現'Interface'的類(或類),但是編碼到Interface會隱藏消費者的所有實現細節。 – 2012-03-06 11:14:55
如果你正在尋找如何使用VS來實現HO項目,請看看這個。 http://stackoverflow.com/a/19121286/1977871 – VivekDev 2016-01-03 03:15:14