Saltar al contenido

¿Cómo probar la unidad HttpContext.SignInAsync()?

Después de tanto batallar pudimos dar con el resultado de este dilema que agunos usuarios de este sitio web han tenido. Si tienes algún dato que compartir puedes compartir tu información.

Solución:

HttpContext.SignInAsync es un método de extensión que utiliza RequestServicescual es IServiceProvider. Eso es lo que debes burlarte.

context.RequestServices
    .GetRequiredService()
    .SignInAsync(context, scheme, principal, properties);

Puede crear una simulación/falso manualmente mediante la creación de clases que se derivan de las interfaces utilizadas o utilizar un marco de simulación como Moq

//...code removed for brevity

var authServiceMock = new Mock();
authServiceMock
    .Setup(_ => _.SignInAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()))
    .Returns(Task.FromResult((object)null));

var serviceProviderMock = new Mock();
serviceProviderMock
    .Setup(_ => _.GetService(typeof(IAuthenticationService)))
    .Returns(authServiceMock.Object);

var controller = new UserController(svc, null) 
    ControllerContext = new ControllerContext 
        HttpContext = new DefaultHttpContext 
            // How mock RequestServices?
            RequestServices = serviceProviderMock.Object
        
    
;

//...code removed for brevity

Podrías fácilmente burlarte del HttpContext así como las otras dependencias.

Puede leer sobre cómo usar Moq aquí en su Inicio rápido

En caso de que estén buscando un ejemplo de NSubstitue (Asp.net core).

    IAuthenticationService authenticationService = Substitute.For();

        authenticationService
            .SignInAsync(Arg.Any(), Arg.Any(), Arg.Any(),
                Arg.Any()).Returns(Task.FromResult((object) null));

        var serviceProvider = Substitute.For();
        var authSchemaProvider = Substitute.For();
        var systemClock = Substitute.For();

        authSchemaProvider.GetDefaultAuthenticateSchemeAsync().Returns(Task.FromResult
        (new AuthenticationScheme("idp", "idp", 
            typeof(IAuthenticationHandler))));

        serviceProvider.GetService(typeof(IAuthenticationService)).Returns(authenticationService);
        serviceProvider.GetService(typeof(ISystemClock)).Returns(systemClock);
        serviceProvider.GetService(typeof(IAuthenticationSchemeProvider)).Returns(authSchemaProvider);

        context.RequestServices.Returns(serviceProvider);


        // Your act goes here

        // Your assert goes here

Si guardas alguna incertidumbre o forma de regenerar nuestro división te inspiramos añadir una reseña y con gusto lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *