15

Tôi đã đoạn mã sau vào bộ điều khiển của tôi:Đơn vị kiểm tra RedirectToRouteResult

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

Tôi muốn thử nghiệm đơn vị chuyển hướng này (RedirectToRouteResult). Tôi đã thực hiện theo cách này:

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()); 

Vì vậy, tôi cần bốn xác nhận để kiểm tra RedirectToRouteResult của tôi. Có cách nào hiệu quả hơn không?

+0

Điều này là đủ – Amit

+0

id cũng khẳng định.instanceoftype vì bạn có nó trở về actionresult – Slicksim

+1

Vâng, tôi làm theo cách này: RedirectToRouteResult result = (RedirectToRouteResult) controller.Captcha (loginUseraccount); Nếu nó không phải là một RedirectToRouteResult một ngoại lệ được ném và thử nghiệm không thành công. – mosquito87

Trả lời

7

Có một efficent cách hơn vì bạn không cần phải kiểm tra hai dòng sau

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

Đó là khẳng định cho mã mà bạn đã không viết. Bạn phải tin tưởng rằng những người viết mã đó có các bài kiểm tra đơn vị riêng. Nếu chống lại tất cả các tỷ lệ cược, hai dòng đầu tiên sẽ bị lỗi, hai xác nhận cuối cùng của bạn sẽ thất bại.