سؤال

كيف يمكنني اختبار الوحدة لإعادة توجيه MVC؟

public ActionResult Create(Product product)
{
    _productTask.Save(product);
    return RedirectToAction("Success");   
}

public ActionResult Success()
{ 
     return View();
}

يكون ايندي لا يزال النهج هو أفضل طريقة يمكن اتباعها، مع المعاينة 5:

 public static void RenderView(this Controller self, string action) 
 {
    typeof(Controller).GetMethod("RenderView").Invoke(self,new object[] { action} ); 
 }

يبدو من الغريب القيام بذلك، خاصة وأن فريق MVC قال إنهم يكتبون إطار العمل ليكون قابلاً للاختبار.

هل كانت مفيدة؟

المحلول

[TestFixture]
public class RedirectTester
{
    [Test]
    public void Should_redirect_to_success_action()
    {
        var controller = new RedirectController();
        var result = controller.Index() as RedirectToRouteResult;
        Assert.That(result, Is.Not.Null);
        Assert.That(result.Values["action"], Is.EqualTo("success"));
    }
}

public class RedirectController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("success");
    }
}

نصائح أخرى

يعمل هذا مع ASP.NET MVC 5 باستخدام NUnit:

    [Test]
    public void ShouldRedirectToSuccessAction()
    {
        var controller = new RedirectController();
        var result = controller.Index() as RedirectToRouteResult;

        Assert.That(result.RouteValues["action"], Is.EqualTo("success"));
    }

إذا كنت تريد اختبار أنك تقوم بإعادة التوجيه إلى وحدة تحكم مختلفة (على سبيل المثال NewController)، فسيكون التأكيد:

Assert.That(result.RouteValues["controller"], Is.EqualTo("New"));

يمكنك التأكيد على ActionResult التي تم إرجاعها، وستحتاج إلى إرسالها إلى النوع المناسب ولكنها تسمح لك باستخدام الاختبار المستند إلى الحالة.من المفترض أن يجد البحث على الويب بعض الروابط المفيدة، إليك واحد فقط رغم ذلك.

يمكنك استخدام Mvc.Contrib.TestHelper الذي يوفر تأكيدات لاختبار عمليات إعادة التوجيه.نلقي نظرة على http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html ونموذج التعليمات البرمجية.قد يكون من المفيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top