Asp.net mvc 修改默认MVC以使用存储库进行模拟
我正在尝试为默认的MVC应用程序编写单元测试。由于该应用程序使用EntityFramework,我怀疑我需要修改该应用程序以使用模拟存储库(这就是人们所说的“注入”吗?) 基于生成的MVC应用程序代码,我是否需要为UserManager和UserStore创建一个模拟存储库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
[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中