15

我已經在我的控制器下面的代碼:單元測試RedirectToRouteResult

public class MyController : BaseController 
{ 
    public ActionResult MyMethod() 
    { 
     ... 
     return RedirectToAction("Index", "Dashboard"); 
    } 
} 

我想單元測試此重定向(RedirectToRouteResult)。 我已經做到了這種方式:

Assert.IsTrue(result.RouteValues.ContainsKey("action")); 
Assert.IsTrue(result.RouteValues.ContainsKey("controller")); 
Assert.AreEqual("Index", result.RouteValues["action"].ToString()); 
Assert.AreEqual("Dashboard", result.RouteValues["controller"].ToString()); 

所以我需要四斷言測試我RedirectToRouteResult。 有沒有更有效的方法?

+0

這是足夠的 – Amit

+0

id也assert.instanceoftype,因爲你有它返回actionresult – Slicksim

+1

是的,我這樣做:RedirectToRouteResult result =(RedirectToRouteResult)controller.Captcha(loginUseraccount); 如果它不是RedirectToRouteResult,則拋出異常並且測試失敗。 – mosquito87

回答

7

有一種比較有效的方法,因爲你不需要來檢驗這兩種線

Assert.IsTrue(result.RouteValues.ContainsKey("action")); 
Assert.IsTrue(result.RouteValues.ContainsKey("controller")); 

這些都是代碼的斷言,你沒有寫。你必須相信那些編寫代碼的人有自己的單元測試。如果不顧一切,前兩行會出錯,你最後的兩個斷言將會失敗。