2012-09-19 17 views
15

मैं एमवीसी 4 .NET 4.5 में अपने नियंत्रक के पुनर्निर्देशन का परीक्षण करने की कोशिश कर रहा हूं। यहाँ एक उदाहरण है:यूनिट परीक्षण एमवीसी 4 रीडायरेक्ट टॉक्शन

[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); 
    } 

मुद्दा चर result यूनिट टेस्ट में null है:

[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"); 
    } 

यहाँ नियंत्रक है। मुझे यह कोड किसी ऐसे व्यक्ति से मिला जो एमवीसी 2 प्रोजेक्ट पर काम कर रहा था और यह उसके लिए काम करना प्रतीत होता था। क्या एमवीसी 4 के साथ कुछ बदल गया है?

अग्रिम धन्यवाद!

+0

क्या आप वाकई कार्रवाई वास्तव में RedirectToAction देता हैं ("सूचकांक", "घर")? पंजीकरण कार्रवाई में कुछ तर्क होना चाहिए। यदि यह किसी अन्य प्रकार का परिणाम देता है और आप इसे RedirectToRouteResult के रूप में बनाने की कोशिश कर रहे हैं, तो आप शून्य से प्राप्त करेंगे। – 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

संबंधित मुद्दे