net mvc example crear asp and c# unit-testing asp.net-core asp.net-core-mvc xunit.net

c# - mvc - Cómo simular el UserManager en ASP.NET 5



security asp net mvc (1)

Lo he logrado con la ayuda de la aplicación de muestra MVC Music Store.

En mi clase Test Unit, configuré el contexto de la base de datos y el UserManager de la siguiente manera:

public class DatabaseSetupTests : IDisposable { private MyDbContext Context { get; } private UserManager<ApplicationUser> UserManager { get; } public DatabaseSetupTests() { var services = new ServiceCollection(); services.AddEntityFramework() .AddInMemoryDatabase() .AddDbContext<MyDbContext>(options => options.UseInMemoryDatabase()); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<MyDbContext>(); // Taken from https://github.com/aspnet/MusicStore/blob/dev/test/MusicStore.Test/ManageControllerTest.cs (and modified) // IHttpContextAccessor is required for SignInManager, and UserManager var context = new DefaultHttpContext(); context.Features.Set<IHttpAuthenticationFeature>(new HttpAuthenticationFeature()); services.AddSingleton<IHttpContextAccessor>(h => new HttpContextAccessor { HttpContext = context }); var serviceProvider = services.BuildServiceProvider(); Context = serviceProvider.GetRequiredService<MyDbContext>(); UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>(); } .... }

Entonces puedo usar el UserManager en mis pruebas de unidad, por ejemplo:

[Fact] public async Task DontCreateAdminUserWhenOtherAdminsPresent() { await UserManager.CreateAsync(new ApplicationUser { UserName = "[email protected]" }, "IDoComplyWithTheRules2016!"); ... }

Si su Inyector de Dependencia no puede resolver un IHttpContextAccessor, entonces no podrá crear una instancia de UserManager debido a que depende de él. Creo (y esto es solo una suposición), que con Asp.Net 5, el UserManager se ocupa de refrescar los reclamos basados ​​en cookies cuando los cambia (reclamos, roles ...) para un usuario y por lo tanto requiere algo de HttpContext para iniciar sesión / logout actions y acceso a cookies.

Estoy escribiendo una interfaz de usuario para administrar usuarios en una ASP.NET 5 . Necesito mostrar cualquier error devuelto por el UserManager en la interfaz de usuario. Tengo los errores IdentityResult pasados ​​en el modelo de vista, pero estoy un poco a la deriva cuando se trata de probar mi código.

¿Cuál es la mejor manera de UserManager el UserManager en ASP.NET 5 ?

¿Debo heredar de UserManager y anular todos los métodos que estoy usando y luego inyectar mi versión de UserManager en una instancia del Controller en mi proyecto de prueba?