mongodb - reflejar - No se puede crear una instancia de proxy... No se pudo encontrar un constructor sin parĂ¡metros
error al reflejar el tipo (3)
MOQ es bueno para simular interfaces, pero no funciona tan bien con clases concretas. Así que en lugar de burlarse de la clase concreta, pregunte por la interfaz:
var userStore = new Mock<IUserStore<PreRegistrationMVC.Models.ApplicationUser>>();
Además, ApplicationUser
debe ser POCO, por lo que no es necesario burlarse de él, simplemente cree su instancia sin MOQ y úsela en las pruebas.
Estoy intentando crear una prueba unitaria usando Moq que prueba el proveedor MongoDB.AspNet.Identity V2 . Esta línea me está dando pena:
var appUser = new Mock<PreRegistrationMVC.Models.ApplicationUser>();
var userStore = new Mock<MongoDB.AspNet.Identity.UserStore<PreRegistrationMVC.Models.ApplicationUser>>();
Parece que el userStore no se crea correctamente, aquí está el error.
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException was unhandled by user code
HResult=-2147024809
Message=Can not instantiate proxy of class: MongoDB.AspNet.Identity.UserStore`1[[MVC.Models.ApplicationUser, MVC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].
Could not find a parameterless constructor.
Source=Moq
StackTrace:
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxyInstance(Type proxyType, List`1 proxyArguments, Type classToProxy, Object[] constructorArguments)
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors)
at Moq.Proxy.CastleProxyFactory.CreateProxy(Type mockType, ICallInterceptor interceptor, Type[] interfaces, Object[] arguments)
at Moq.Mock`1.<InitializeInstance>b__2()
at Moq.PexProtector.Invoke(Action action)
at Moq.Mock`1.InitializeInstance()
at Moq.Mock`1.OnGetObject()
at Moq.Mock.GetObject()
at Moq.Mock.get_Object()
at Moq.Mock`1.get_Object()
at MVC_Tests.Identity.Accounts.AccountController_Test.TestSuccessfulRegister() in c:/Users/Tim/Documents/Visual Studio 2013/Projects/PreRegistrationApp/MVC_Tests/Identity/Accounts/AccountController_Test.cs:line 108
InnerException:
Soy completamente nuevo en Moq, así que estoy buscando: ¿Qué tipo de configuración se necesita para que Moq ejemplifique esto? ¿Hay algo en la clase UserStore que no funcione bien con Moq?
Gracias por leer.
Puede intentar referirse al comportamiento simulado, como se muestra a continuación
Mock<testClass>(MockBehavior.Strict, new object[] {"Hello"});
Tuve este problema He escrito...
var x = new Mock<Concrete>();
... en lugar de ...
var x = new Mock<IConcrete>();