ASP.NET Core 集成测试中模拟登录用户的一种姿势

不管哪种用户验证方式,最终都是在验证成功后设置 HttpContext.User ,后续处理环节通过 HttpContext.User 获取用户信息。如果能直接修改 HttpContext.User ,就能达到模拟登录的目的,而 ASP.NET Core 的中间件(middleware)天生具备的可以任意修改 HttpContext 的能力,让实现这个想法不费吹灰之力。

首先实现一个模拟登录用户并修改 HttpContext.User 的中间件。

ASP.NET Core 集成测试中模拟登录用户的一种姿势

然后通过 IStartupFilter 注册上面的中间件,这样可以确保它先于 Startup.Configure 中注册的中间件。

ASP.NET Core 集成测试中模拟登录用户的一种姿势

最后通过重写 WebApplicationFactory 的 ConfigureWebHost 方法注册 IStartupFilter 的实现。ASP.NET Core 集成测试中模拟登录用户的一种姿势

这样就轻松搞定了。