Механика выполнения этой работы не сложна, но тестирование немного странно. Сценарий заключается в том, что я хочу вывести некоторые базовые пользовательские данные в данные представления на основе свойства User базового контроллера (объект 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. Я хотел бы проверить в своем макете UserManager, что вызывается SetupUserViewData. Я не использую пользовательский фильтр, потому что у меня нет полноценной структуры внедрения зависимостей (фильтр должен получить IUserManager).
Есть предложения? Поскольку это будет использоваться везде, я бы хотел, чтобы тестирование было правильным.