Asp.net mvc 修改默认MVC以使用存储库进行模拟

Asp.net mvc 修改默认MVC以使用存储库进行模拟,asp.net-mvc,visual-studio,mocking,Asp.net Mvc,Visual Studio,Mocking,我正在尝试为默认的MVC应用程序编写单元测试。由于该应用程序使用EntityFramework,我怀疑我需要修改该应用程序以使用模拟存储库(这就是人们所说的“注入”吗?) 基于生成的MVC应用程序代码,我是否需要为UserManager和UserStore创建一个模拟存储库 [Authorize] public class AccountController : Controller { public AccountController() : this(new User

我正在尝试为默认的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)
[授权]
公共类AccountController:控制器
{
公共账户控制员()
:此(新的UserManager(新的UserStore(新的ApplicationDbContext()))
{
}
公共帐户控制器(用户管理器用户管理器)
{
UserManager=UserManager;
}
公共用户管理器用户管理器{get;private set;}
//
//POST:/帐户/登录
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
if(ModelState.IsValid)
{
var user=await UserManager.FindAsync(model.UserName,model.Password);
如果(用户!=null)
“注入”与模拟完全不同。甚至模拟在这里也可能不是正确的选择。尤其是您正在测试的上下文。如果您为SUT(测试中的系统)提供虚假/固定的答案,它是您要处理的存根。注入以不同的方式发挥作用。是的,您将“注入”单元测试上下文上的存根或模拟。但使用DI()时,您还可以在执行过程中使用DI框架(如果有的话)注入真实实例

如果您正在测试登录方法,那么是的,您需要根据您测试的内容为用户管理器和/或用户存储创建存根或模拟,并将它们“注入”到您的SUT中