2011-03-11 33 views
1

我很新的MVC(仅2天),但我不知道 - 有什么办法编写测试通过RedirectToAction联动控制器通话的整个产业链?即一个接一个地测试整个呼叫序列而无需手动编码每个呼叫。如何测试由RedirectToAction链接的整个控制器调用链?

沿着线egsomething:

MyTestMethod() 
{ 

    var myController = new MyController(someparam1); 

    ActionResult action = myController.DoSomething(); 

    RedirectToAction ar = action as RedirectToAction; 

    // loop while the ActionResult is an RedirectToAction 
    while (ar!=null) 
    { 
    // automatically make direct call to next redirect method in 
    // chain, is something like this possible? 
    action = ar.NextMethodToCall(ar.NextMethodToCallParam1, ar.NextMethodToCallParam2); 

    ar = action as RedirectToAction; 
    } 

} 

所以,为了清楚,这并不是一个单元测试,(这将仅测试单个控制器方法返回正确的ActionResult),而是一测试整个重定向链。

注意 - 因为这只是一个测试方法,在MVC应用程序将不会在它被调用的时候运行。 IIS甚至不会安装在测试机器上。

回答

1

你可以把一些日志/测试逻辑在NextMethodToCall()方法。

+0

我不明白这个问题的答案。也许我的问题还不够清楚。 NextMethodToCall()实际上不是作为命名方法存在的,而是代码使用RedirectToAction对象通过检查RedirectToAction属性动态确定“nextmethodtocall”。问题的核心是 - 如何动态确定下一个要调用的方法,并使用ActionResult/RedirectToAction对象在运行时为该方法填入参数?应该排除对实际发布代码的任何更改,因为我们不想更改代码来适应测试。 – jimasp 2011-03-14 09:15:07

+0

@jimasp,您可以继承ActionResult(或RedirectToRouteResult)并添加您的自定义逻辑。 – smartcaveman 2011-03-14 12:38:17

+0

谢谢,多阅读一些内容后,我意识到我需要一种不同的方法(请参阅答案)。 – jimasp 2011-03-15 15:29:23