15

Mam następujący kod w moim kontrolera:testów jednostkowych RedirectToRouteResult

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

chciałbym testów jednostkowych to przekierowanie (RedirectToRouteResult). Zrobiłem to w ten sposób:

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

więc muszę cztery twierdzi przetestować RedirectToRouteResult. Czy istnieje skuteczniejszy sposób?

+0

Jest to wystarczające – Amit

+0

id również assert.instanceoftype skoro masz to powrót ActionResult – Slicksim

+1

Tak, robię to w ten sposób: wynik RedirectToRouteResult = (RedirectToRouteResult) controller.Captcha (loginUseraccount); Jeśli to nie jest RedirectToRouteResult, wyjątek jest generowany, a test kończy się niepowodzeniem. – mosquito87

Odpowiedz

7

Jest bardziej skuteczny sposób, ponieważ nie trzeba przetestować te dwie linie

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

Są to twierdzenia kodów, które nie zostały napisane. Musisz ufać, że ci, którzy zapisują ten kod, mają tam własne testy jednostkowe. Jeśli wbrew wszystkiemu pierwsze dwa wiersze byłyby błędne, twoje dwa ostateczne twierdzenia zawiodłyby.

Powiązane problemy