2012-07-15 19 views
13

में इकाई परीक्षण के साथ रीडायरेक्ट सत्यापित करें क्या एक यूनिट परीक्षण में सत्यापित करने का कोई आसान तरीका है कि नियंत्रक कार्रवाई वास्तव में किसी विशिष्ट पृष्ठ पर रीडायरेक्ट कर रही है?एएसपीनेट एमवीसी

नियंत्रक कोड:

public ActionResult Create(ProductModel newProduct) 
{ 
    this.repository.CreateProduct(newProduct); 
    return RedirectToAction("Index"); 
} 

तो अपने परीक्षण में, मुझे लगता है कि नियंत्रक वास्तव में पुनः निर्देशित किया गया है सत्यापित करने की आवश्यकता होगी।

ProductController controller = new ProductController(repository); 

RedirectToRouteResult result = (RedirectToRouteResult)controller.Create(newProduct); 

bool redirected = checkGoesHere; 
Assert.True(redirected, "Should have redirected to 'Index'"); 

मुझे यकीन नहीं है कि सत्यापन कैसे करें। कोई विचार?

उत्तर

25

ज़रूर:

Assert.AreEqual("Index", result.RouteValues["action"]); 
Assert.IsNull(result.RouteValues["controller"]); // means we redirected to the same controller 

और MvcContrib.TestHelper का उपयोग कर आप एक अधिक सुरुचिपूर्ण तरीके से इस इकाई परीक्षण (आप भी एक RedirectToRouteResult को कास्ट करने के लिए की जरूरत नहीं है) लिख सकते हैं:

// arrange 
var sut = new ProductController(repository); 

// act 
var result = sut.Create(newProduct); 

// assert 
result 
    .AssertActionRedirect() 
    .ToAction("Index"); 
+0

धन्यवाद डैरिन कुछ इस तरह कर सकते हैं ...

var result = sut.Create(newProduct) as RedirectToRouteResult; Assert.Equal(result.RouteValues["action"], "Index"); Assert.Equal(result.RouteValues["Parameter Name"], "Parameter Value"); 

आशा - मुझे पता था कि यह कुछ इस तरह आसान होगा। TestHelper –

+0

+1 यह MvcContrib लाइब्रेरी शानदार है! –

+0

के लिंक के लिए – will

11

कोशिश यह ...

var result = sut.Create(newProduct) as RedirectToRouteResult; 
Assert.Equal(result.RouteValues["action"], "Index"); 

और यदि आप पुनर्निर्देशन में पैरामीटर पास कर रहे हैं यो यू इस मदद करता है :)