3
使這項工作的機制並不難,但測試它有點奇怪。該方案是我想基於基本控制器(IPrincipal對象)的User屬性將一些基本用戶數據轉儲到視圖數據中,以便母版頁始終擁有它。我需要訪問我的IUserManager(服務類),它由控制器工廠中的自定義DI提供。嘲笑用戶對測試沒有任何問題。但是,爲基本控制器中的每個操作實現此目的的最簡單方法是通過重寫OnAuthorization方法來完成此操作。然後,基類看起來是這樣的:我可以在ASP.NET MVC控制器基類中測試OnAuthorization的覆蓋嗎?
public abstract class BaseController : Controller
{
public BaseController(IUserManager userManager)
{
UserManager = userManager;
}
public IUserManager UserManager { get; private set; }
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
UserManager.SetupUserViewData(User, ViewData);
}
}
的問題是,有沒有辦法,我已經能夠在測試中獲得OnAuth方法火地身影。我想在我的模擬UserManager中驗證SetupUserViewData被調用。我沒有使用自定義過濾器,因爲我沒有完整的依賴注入框架(過濾器需要獲得IUserManager)。
有什麼建議嗎?因爲這將在任何地方使用,所以我想要測試的權利。
你以爲我測試了正確的事情呢?我想我可能在這裏表現得太學術了,但感覺很奇怪,因爲我假定控制器在運行時會正確執行,並且如果有授權用戶,則調用該方法。 – 2010-02-17 08:04:20
好吧,如果你要測試我認爲你想要的,你會測試框架,而不是你的代碼。你必須假設你正在使用的框架已經過適當的測試。 – 2010-02-17 08:10:14
順便說一句 - 您可以更輕鬆地測試OnAuthorization()方法本身,方法是將您的控制器轉換爲IAuthorizationFilter並直接調用OnAuthorization()方法。 (請注意,Controller實現IAuthorizationFilter,並且此接口委託給您的重寫方法。) – Levi 2010-02-17 09:03:33