做这项工作的机制并不难,但是测试它有点奇怪。场景是,我希望基于基本控制器(iprincipal对象)的用户属性将一些基本用户数据转储到视图数据中,以便主页面始终具有这些数据。我需要访问我的iusermanager(一个服务类),该类由控制器工厂中的自定义DI提供。模拟用户对测试没有问题。但是,对于基本控制器中的每个操作,实现这一点的最简单方法是通过重写OnAuthorization方法来实现。然后,基类如下所示:
public abstract class BaseController : Controller
{
public BaseController(IUserManager userManager)
{
UserManager = userManager;
}
public IUserManager UserManager { get; private set; }
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
UserManager.SetupUserViewData(User, ViewData);
}
}
问题是,我无法在测试中找到让OnAuth方法触发的方法。我想在我的模拟用户管理器中验证是否调用了SetupUserViewData。我没有使用自定义过滤器,因为我没有一个完整的依赖注入框架(过滤器需要一个IUserManager)。
有什么建议吗?因为这将在任何地方使用,所以我想正确地进行测试。