2012-09-19 26 views
15

MVC 4 .Net 4.5でコントローラのリダイレクトをユニットテストしようとしています。ここでの例である:ここでユニットテストMVC 4 RedirectToAction

[TestMethod] 
    public void Register_PassValidModel_RedirectToHomeIndexShouldBeTrue() 
    { 
     //Arrange 
     var registerModel = new RegisterModel 
     { 
      Email = "[email protected]", 
      Password = "password" 
     }; 

     //Assign 
     var result = _controller.Register(registerModel) as RedirectToRouteResult; 

     //Assert 
     result.RouteValues["Action"].ShouldBeEqual("Index"); 
     result.RouteValues["Controller"].ShouldBeEqual("Home"); 
    } 

がコントローラである:

[HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var userToRegister = new User { Email = model.Email, Password = model.Password }; 
      var service = new UserService(_userRepository); 

      User user = service.RegisterUser(userToRegister); 

      if (user.UserErrorMessages.Count != 0) 
      { 
       user.UserErrorMessages.ForEach(x => ModelState.AddModelError("", x)); 
       return View(model); 
      } 

      SetCookie(model.Email); 

      return RedirectToAction("Index", "Home"); 
     } 
     return View(model); 
    } 

発行ユニットテストにおける変数resultnullあります。私はMVC 2プロジェクトに取り組んでいた人からこのコードを見つけました。彼は彼のために働いていたようです。 MVC 4で何か変わった?

ありがとうございます!

+0

あなたのためにそれが意志便利願ってアクションが実際にRedirectToAction(「インデックス」、「ホーム」)を返しますが、確かではありますか? Registerアクションにはいくつかのロジックが必要です。他の種類の結果が返され、それをRedirectToRouteResultとして作成しようとすると、nullが返されます。 – Felix

+0

私はRedirectToRouteResultオブジェクトを取得しました。あなたのコントローラはまさにそのように見えますか? – Rickard

+0

ViewResultを取得している可能性があります。 – VJAI

答えて

22

、このいずれかを試してみてくださいは

var result= (RedirectToRouteResult)controller.Register(registrModel); 

      result.RouteValues["action"].Equals("Index"); 
      result.RouteValues["controller"].Equals("Home"); 

      Assert.AreEqual("Index", action.RouteValues["action"]); 
      Assert.AreEqual("Home", action.RouteValues["controller"]); 
+1

これは正しい答えとしてマークする必要があります。また の複製。http://stackoverflow.com/questions/7601972/what-is-the-best-way-to-test-a-redirecttoaction – GetFuzzy