2017-09-07 118 views
0

我有一個基地控制器,其餘的OnActionExecutionAsync方法設置一些公共控制器屬性,然後在OnActionExecuted方法 此工作正常設置一些常見視圖模型的屬性,但我現在需要爲它編寫一些單元測試。沒有TDD的我..單元測試基地控制器OnActionExecutionAsync和OnActionExecuted方法

代碼我是:

public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
{ 
    //set some controller properties 
    await base.OnActionExecutionAsync(context, next); 
} 

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    //set some other viewmodel properties 
    base.OnActionExecuted(filterContext); 
} 

的問題我已經與OnActionExecutionAsync測試中,比它被嘲笑的背景下右痛等,是該方法完成時它會自動調用OnActionExecuted方法,並且由於ActionExecutedContext爲空而倒下。 我假設我需要撥打await base.OnActionExecutionAsync(context, next);,而不是簡單地await next();?繼續使用管道,雖然已經檢查了github中的Controller代碼,但似乎基本實現只在調用ActionExecutingContext的結果爲空時調用OnActionExecutedaspnet core controller on GitHub 任何想法如何讓我的測試在沒有跳到OnActionExecuted的情況下工作?

回答

3

您是集成測試。當事情難以測試時,這是一個非常明顯的跡象,表明你遠遠超出了單元測試的範圍,應該退後一步並重新評估。如果您想確保某些功能可行,請創建一個封裝該功能的方法,然後測試。您可以放心地假設OnActionExecutionAsync等將按照它們應該調用您的方法的方式工作,因爲該功能已經在MVC代碼庫中進行了測試。