修改默认MVC以使用存储库进行模拟

时间:2013-12-04 21:10:56

标签: asp.net-mvc visual-studio mocking

我试图为默认的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)

1 个答案:

答案 0 :(得分:1)

“注射”与嘲弄完全不同。甚至嘲笑也许不是这里的正确选择。特别是您正在测试的上下文。如果您正在为SUT(被测系统)提供假/罐装答案,那么这是您处理的存根。注射以不同的方式发挥作用。是的,你会在单元测试环境中“注入”存根或模拟。但是使用DI(dependency injection),你还可以在执行期间使用你的DI框架注入真实实例。

如果您正在测试Login方法,是的,您需要为用户管理器和/或用户存储创建存根或模拟,具体取决于您测试“注入”SUT的内容。