2011-11-22 55 views
0

我正在爲MVC Web應用程序編寫一些集成測試,這涉及到在IIS Express啓動的應用程序的實例中激發http post並獲取請求。返回不同的HTTP狀態代碼進行測試

問題是,我想斷言驗證已通過(例如在帳戶創建),顯然這是不可能的從只是驗證消息中解釋與返回標記混合(很不是不可能的,但出於問題)。

什麼我目前做的是檢查在我的控制器基類中的ModelStateOnActionExecuted事件和狀態代碼設置爲202(接受,但仍然需要處理):

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    if (!ModelState.IsValid) 
    { 
      Response.StatusCode = 202; 
    } 

    base.OnActionExecuted(filterContext); 
} 

我知道202沒有按」並沒有真正反映發生了什麼,但是沒有符合情況的狀態代碼,並且在應用程序正常使用時它不會在瀏覽器上導致錯誤。

什麼是人們對這種設計的意見?它會有什麼不利影響?

+0

我聽到你的兄弟 – jcvandan

回答

2

爲什麼不測試只是控制器? 應該沒有必要測試堆棧的IIS部分。

如果你真的想這樣做,我認爲隱藏的領域充滿了你想驗證的數據是一個更好的方法。

+2

我想測試應用程序運行,因爲否則測試只是控制器需要我複製我的測試項目中的所有配置文件(這是一個大項目,所以有很多,我也想測試配置工程),也這些都是集成測試,所以我想測試一些東西,如授權cookie(登錄等)。 – jcvandan

0

哦,好吧......看起來大多數人的意見似乎是'不關心'或'不知道'。

萬一人有興趣我已經決定不使用的狀態代碼,因爲它是一個有點哈克,我只需添加一個頭的響應,而是和做對即斷言:

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    if (!ModelState.IsValid) 
    { 
     Response.AddHeader("Validation", "Failed"); 
    } 

    base.OnActionExecuted(filterContext); 
}