【发布时间】:2016-07-09 14:52:28
【问题描述】:
我在我的 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 方法,该方法在基类SignInManager<ApplicationUser, string> 中声明为virtual,但在子类ApplicationSignInManager 中未被覆盖。
我也试过这个选项:
var mockSignInManager = new Mock<ApplicationSignInManager>()
{ CallBase = true };
mockSignInManager.Setup(
m => m.PasswordSignInAsync(string.Empty, string.Empty, true, true));
但是 PasswordSignInAsync 没有出现在 Intellisense 中,编译器抱怨它无法在 ApplicationSignInManager 上找到该方法。
如何让它显示出来?
【问题讨论】:
标签: .net unit-testing tdd moq