我在我的MVC应用程序中使用Asp.Net Identity,我有一个名为ApplicationSignInManager
的类,如下所示:
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);
}
}
现在,我想为控制器上的操作编写单元测试。我正在使用Moq 4.5.10的Microsoft Visual Studio单元测试框架。
该操作调用基类PasswordSignInAsync
中声明为virtual
的{{1}}方法,但未在子类SignInManager<ApplicationUser, string>
中覆盖。
我也试过这个选项:
ApplicationSignInManager
但是var mockSignInManager = new Mock<ApplicationSignInManager>()
{ CallBase = true };
mockSignInManager.Setup(
m => m.PasswordSignInAsync(string.Empty, string.Empty, true, true));
没有出现在Intellisense中,并且编译器抱怨它无法在PasswordSignInAsync
上找到该方法。
如何让它出现?
答案 0 :(得分:0)
我在单元测试项目中安装了NuGet包 Microsoft.AspNet.Identity.Owin ,它开始获取基类中的所有方法,因为该基类位于 Microsoft中。 AspNet.Identity.Owin.dll 程序集。
简而言之,如果要在模拟对象中访问基类的方法,那么如果该基类位于与派生类分开的程序集中,则必须在测试项目中添加对基类程序集的引用