gpt4 book ai didi

asp.net-mvc - 我可以在 ASP.NET MVC Controller 基类中测试 OnAuthorization 的覆盖吗?

转载 作者:行者123 更新时间:2023-12-01 09:39:28 24 4
gpt4 key购买 nike

制作这项工作的机制并不难,但测试它有点奇怪。场景是我想根据基本 Controller (一个 IPrincipal 对象)的 User 属性将一些基本用户数据转储到 View 数据中,以便母版页始终拥有它。我需要访问我的 IUserManager(一个服务类),它由 Controller 工厂中的自定义 DI 提供。模拟用户对于测试来说是没有问题的。但是,为基本 Controller 中的每个操作实现此目的的最简单方法是通过覆盖 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 是否被调用。我没有使用自定义过滤器,因为我没有成熟的依赖注入(inject)框架(过滤器需要获取 IUserManager)。

有什么建议吗?由于这将在任何地方使用,我想正确进行测试。

最佳答案

您可以通过使用调用 OnAuthorization 方法的公共(public)方法创建从基本 Controller 继承的类来实现此目的。像这样的:

public class TestController : BaseController {
public TestController(IUserManager userManager) : base(userManager) {
}

public void CallOnAuthorization(AuthorizationContext filterContext) {
OnAuthorization(filterContext);
}
}

然后你像这样测试它:

[Test]
public void TestMethod() {
var userManager = //Mock usermanager;
var filterContext = //Mock AuthorizationContext;
var controller = new TestController(userManager);
controller.CallOnAuthorization(filterContext);
//Assert here
}

关于asp.net-mvc - 我可以在 ASP.NET MVC Controller 基类中测试 OnAuthorization 的覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2279004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com