2011-03-11 21 views
1

我很新的MVC(僅2天),但我不知道 - 有什麼辦法編寫測試通過RedirectToAction聯動控制器通話的整個產業鏈?即一個接一個地測試整個呼叫序列而無需手動編碼每個呼叫。如何測試由RedirectToAction鏈接的整個控制器調用鏈?

沿着線egsomething:

MyTestMethod() 
{ 

    var myController = new MyController(someparam1); 

    ActionResult action = myController.DoSomething(); 

    RedirectToAction ar = action as RedirectToAction; 

    // loop while the ActionResult is an RedirectToAction 
    while (ar!=null) 
    { 
    // automatically make direct call to next redirect method in 
    // chain, is something like this possible? 
    action = ar.NextMethodToCall(ar.NextMethodToCallParam1, ar.NextMethodToCallParam2); 

    ar = action as RedirectToAction; 
    } 

} 

所以,爲了清楚,這並不是一個單元測試,(這將僅測試單個控制器方法返回正確的ActionResult),而是一測試整個重定向鏈。

注意 - 因爲這只是一個測試方法,在MVC應用程序將不會在它被調用的時候運行。 IIS甚至不會安裝在測試機器上。

回答

1

你可以把一些日誌/測試邏輯在NextMethodToCall()方法。

+0

我不明白這個問題的答案。也許我的問題還不夠清楚。 NextMethodToCall()實際上不是作爲命名方法存在的,而是代碼使用RedirectToAction對象通過檢查RedirectToAction屬性動態確定「nextmethodtocall」。問題的核心是 - 如何動態確定下一個要調用的方法,並使用ActionResult/RedirectToAction對象在運行時爲該方法填入參數?應該排除對實際發佈代碼的任何更改,因爲我們不想更改代碼來適應測試。 – jimasp 2011-03-14 09:15:07

+0

@jimasp,您可以繼承ActionResult(或RedirectToRouteResult)並添加您的自定義邏輯。 – smartcaveman 2011-03-14 12:38:17

+0

謝謝,多閱讀一些內容後,我意識到我需要一種不同的方法(請參閱答案)。 – jimasp 2011-03-15 15:29:23