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.