Saltar al contenido

Simulación de los nuevos UserManager y RoleManager de Microsoft Entity Framework Identity

Haz todo lo posible por interpretar el código correctamente previamente a usarlo a tu trabajo si tdeseas aportar algo puedes decirlo en los comentarios.

Solución:

Alternativamente, puede burlarse de la IUserStore interfaz que UserManager acepta como argumento.

var userStore = new Mock>();
var userManager = new UserManager(userStore.Object);

Como señala @Joe Brunscheon en el comentario a continuación, UserManager detecta soporte para otras interfaces como IUserPasswordStore, etc. También puede moq esos:

var passwordManager = userStore.As>()
    .Setup(...).Returns(...);

No tiene que moq todos estos a la vez, solo puede moq ellos según lo necesite su código bajo prueba. En realidad, el UserStore que EF usa para implementar IUserStore implementa otras interfaces, y UserManager realizará una detección interna para ver si estas interfaces están implementadas y, por lo tanto, si se admiten características adicionales. Afortunadamente, moq te permite simular un sustituto que puede implementar muchas interfaces, usando .As().

En resumen, Microsoft.AspNet.Identity le brinda todo lo que necesita para usarlo sin envoltorio, sin un envoltorio, en su código. Siempre que use la inyección de dependencia para crear instancias de su UserManager, puede modificarlo de forma segura en pruebas unitarias simulando las interfaces que consume y pasándolas a través de algún tipo de IUserStore moq que se aumenta para admitir métodos en otras interfaces detectadas internamente por UserManager.

Me gusta actualizar la solución a esta pregunta para cualquiera que trabaje en el núcleo de asp.net:

    private Mock> GetMockUserManager()
    
        var userStoreMock = new Mock>();
        return new Mock>(
            userStoreMock.Object, null, null, null, null, null, null, null, null);
    

si, 8 veces null pero hasta ahora no hay ninguna solución más elegante. Si está interesado en los otros parámetros, eche un vistazo al código fuente.

No podrá simular UserManager o RoleManager directamente. Sin embargo, lo que PUEDE hacer es burlarse de un objeto que los usa.

Por ejemplo:

public interface IWrapUserManager

    UserManager WrappedUserManager get; set;
    //provide methods / properties that wrap up all UserManager methods / props.


public class WrapUserManager : IWrapUserManager

    UserManager WrappedUserManager get; set;
    //implementation here. to test UserManager, just wrap all methods / props.


//Here's a class that's actually going to use it.
public class ClassToTest

    private IWrapUserManager _manager;
    public ClassToTest(IWrapUserManager manager)
    
        _manager = manager;
    
    //more implementation here

Pasando a la burla:

[TestClass]
public class TestMock

    [TestMethod]
    public void TestMockingUserManager()
    
        var mock = new Mock();
        //setup your mock with methods and return stuff here.
        var testClass = new ClassToTest(mock.Object); //you are now mocking your class that wraps up UserManager.
        //test your class with a mocked out UserManager here.
    

Puedes añadir valor a nuestra información tributando tu experiencia en los comentarios.

¡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 *