我试图为默认的MVC应用程序编写单元测试。由于此应用程序使用EntityFramework,我怀疑我将需要修改应用程序以使用模拟存储库(这是人们的意思"注入"?)
因此,基于生成的MVC应用程序代码,我是否需要为UserManager和UserStore创建模拟存储库?
[Authorize]
public class AccountController : Controller
{
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public UserManager<ApplicationUser> UserManager { get; private set; }
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
答案 0 :(得分:1)
“注射”与嘲弄完全不同。甚至嘲笑也许不是这里的正确选择。特别是您正在测试的上下文。如果您正在为SUT(被测系统)提供假/罐装答案,那么这是您处理的存根。注射以不同的方式发挥作用。是的,你会在单元测试环境中“注入”存根或模拟。但是使用DI(dependency injection),你还可以在执行期间使用你的DI框架注入真实实例。
如果您正在测试Login方法,是的,您需要为用户管理器和/或用户存储创建存根或模拟,具体取决于您测试“注入”SUT的内容。