Lul*_*aby 7 model-view-controller asp.net-mvc controller rhino-mocks
我想测试OnException,OnActionExecuted一个MVC控制器的事件.
如果我像这样使用mock:
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var request = MockRepository.GenerateMock<HttpRequestBase>();
httpContext.Expect(c => c.Request).Return(request).Repeat.AtLeastOnce();
request.Expect(r => r.IsAuthenticated ).Return(true).Repeat.AtLeastOnce();
var controller = new MyController() ;
controller.ControllerContext = new ControllerContext(httpContext,
new RouteData(),
controller);
var result = controller.Execute() as ViewResult;
Run Code Online (Sandbox Code Playgroud)
...动作方法正在执行,但不会调用事件.
Lev*_*evi 15
这是MVC 关注原则的分离之一.当您对方法进行单元测试时,您将独立于应用于其的任何过滤器来测试方法本身.(而OnException()和OnActionExecuting()实际上只是美化过滤器.)
如果您想独立测试其他方法,您可以自由地进行测试.通常,您可以通过调用过滤器来实现此目的:
((IActionFilter)controller).OnActionExecuting(...)
((IExceptionFilter)controller).OnException(...)
Run Code Online (Sandbox Code Playgroud)
您必须创建上下文对象以传递给这些方法.最后,您有三个单元测试:一个用于OnActionExecuting(),一个用于OnException(),另一个用于您正在测试的实际方法.这个设置的好处是,一旦你对过滤器进行了一次单元测试,你不必再担心它们的任何其他单元测试了.
例如,如果您有Method1(),Method2()和Method3(),则无需测试方法+过滤器的每个组合.只需要五个单元测试:OnActionExecuting(),OnException(),Method1(),Method2()和Method3().这消除了冗余测试,并且可以更轻松地跟踪代码中的潜在错误.
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |