2016-07-09 7 views
0

Ich bin mit Asp.Net Identität in meiner MVC-Anwendung und ich habe eine Klasse mit dem Namen ApplicationSignInManager die wie folgt aussieht außer Kraft gesetzt hat: JetztMoq Erhalten Sie eine Basisklasse Methode aufzurufen, die nicht

public class ApplicationSignInManager : SignInManager<ApplicationUser, string> 
{ 
    public ApplicationSignInManager(ApplicationUserManager userManager, 
     IAuthenticationManager authenticationManager) 
     : base(userManager, authenticationManager) 
    { 
    } 

    public override Task<ClaimsIdentity> CreateUserIdentityAsync(ApplicationUser user) 
    { 
     return user.GenerateUserIdentityAsync((ApplicationUserManager)UserManager); 
    } 

    public static ApplicationSignInManager Create(IdentityFactoryOptions<ApplicationSignInManager> options, 
     IOwinContext context) 
    { 
     return new ApplicationSignInManager(context.GetUserManager<ApplicationUserManager>(), 
      context.Authentication); 
    } 
} 

, würde ich mag einen Komponententest für eine Aktion auf einem Controller schreiben. Ich verwende das Framework Microsoft Visual Studio Unit Test mit Moq 4.5.10.

Die Aktion ruft die PasswordSignInAsync Methode, die virtual in der Basisklasse deklariert wird SignInManager<ApplicationUser, string> aber es ist nicht in der Kinderklasse ApplicationSignInManager außer Kraft gesetzt.

Ich habe diese Option versucht, auch:

var mockSignInManager = new Mock<ApplicationSignInManager>() 
     { CallBase = true }; 

mockSignInManager.Setup(
     m => m.PasswordSignInAsync(string.Empty, string.Empty, true, true)); 

Aber PasswordSignInAsync nicht in der Intellisense angezeigt und der Compiler beschwert sich, diese Methode nicht auf ApplicationSignInManager finden.

Wie bekomme ich es zu zeigen?

Antwort

0

Ich installierte das NuGet Paket Microsoft.AspNet.Identity.Owin in dem Unit-Test-Projekt und es begann in der Basisklasse all Methoden bekommen, weil die Basisklasse in dem Microsoft.AspNet.Identity.Owin war. dll Montage.

Kurz gesagt, wenn Sie auf Methoden einer Basisklasse in Ihrem Mock-Objekt zugreifen möchten, müssen Sie, wenn sich diese Basisklasse in einer von der abgeleiteten Klasse getrennten Assembly befindet, einen Verweis auf die Basisklassenassembly in Ihrem Test hinzufügen Projekt.