0
所以我重写OnAction在我的BaseController类中执行以设置BaseViewModel的CurrentUser属性。我想能够单元测试这个,但不知道如何。如何测试OnActionExecuted过滤器?
下面的代码:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult && ((ViewResult)filterContext.Result).ViewData.Model != null)
{
((BaseViewModel)((ViewResult)filterContext.Result).ViewData.Model).CurrentUser = CurrentUser;
}
base.OnActionExecuted(filterContext);
}
而这里的测试:
BaseController controller = new BaseController();
Mock<ActionExecutedContext> MockActionExecutedContext = new Mock<ActionExecutedContext>();
MockActionExecutedContext.Setup(ctx => ctx.Result).Returns(new ViewResult());
controllerAccessor.OnActionExecuted(MockActionExecutedContext.Object);
ViewResult vr = MockActionExecutedContext.Object.Result as ViewResult;
BaseViewModel model = vr.ViewData.Model as BaseViewModel;
User currentUser = model.CurrentUser;
Assert.NotNull(currentUser);
当我运行测试,我发现了错误:
System.NotSupportedException : Invalid setup on a non-virtual member: ctx => ctx.Result
我知道我只能在每个派生控制器的单元测试中测试属性,但必须有一个更简洁的方法来完成此操作。有任何想法吗?