Ich würde gerne wissen, ob jemand mir dabei helfen kann.Mock ApplicationUserManager für Unit Testing MVC-Controller
Ich schreibe Komponententests für einen bestimmten Controller. Das Controller erbt von einem Base und Base hat diese Eigenschaft:
private ApplicationUserManager userManager;
public ApplicationUserManager UserManager
{
get { return this.userManager ?? this.Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
set { this.userManager = value; }
}
Der Ctor für ApplicationUserManager ist:
public ApplicationUserManager(IUserStore<ApplicationUser> store, IIdentityMessageService emailService)
: base(store)
{
this.EmailService = emailService;
var dataProtectionProvider = Startup.DataProtectionProvider;
this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("ASP.NET Identity"));
}
Dies ist, was ich die ApplicatonUserManager Klasse zu verspotten tue:
var store = new Mock<IUserStore<ApplicationUser>>();
var emailService = new Mock<IIdentityMessageService>();
var applicationUserManager = new Mock<ApplicationUserManager>(store.Object, emailService.Object);
this.targetController.UserManager = applicationUserManager.Object;
var dataprotectionprovided = new Mock<IDataProtectionProvider>();
applicationUserManager.Setup(r => r.UserTokenProvider).Returns(new DataProtectorTokenProvider<ApplicationUser, string>(dataprotectionprovided.Object.Create("ASP.NET Identity")));
this.targetController.UserManager = applicationUserManager.Object;
Ich habe versucht, dies zu verspotten, aber weil dies keine virtuelle Eigenschaft (UserTokenProvider) ist, erlaubt es mir nicht, und ich bekomme diese Ausnahme:
System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: r => r.UserTokenProvider
Kann mir jemand bei diesem Problem helfen? Ich will nur das, um verspotten den Controller zu testen, die von einem Basecontroller erbt, der diese Eigenschaft hat ..
Dank
Anstatt spöttisch die ApplicationUserManager mißbrauchen, können Sie einen anderen Konstruktor für sie erstellen und über den Ersatz Konstruktor instanziiert? – bwyn