我正在嘗試使用新的VS2013默認MVC w /身份驗證項目瞭解單元測試。我想要測試的第一件事就是註冊一個用戶。 (我知道我可能不需要單元測試,因爲它已經是MS測試的代碼,但我想用這個來理解基礎知識)。我也聽說新的會員代碼更「可測試」,所以我不需要創建我自己的會員界面,等等......單元測試MVC身份驗證VS 2013
我使用NSubstitute作爲僞造框架。
看着賬戶控制器 - >註冊()異步方法
namespace WebApplication1.Controllers
{
[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/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.UserName };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
AddErrors(result);
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
如果我想寫一個簡單的測試(如Register_RegisterValidUser),我會怎麼做呢?我知道我需要以某種方式取代了的UserManager但是這並沒有爲我工作:
var substitute = Substitute.For<UserManager<ApplicationUser>>();
我也明白,我需要繞過使用Task.FromResult異步任務<>的功能,但我不知道怎麼樣從CreateAsync()和SigninAsync()方法返回有效的對象。
有人可以幫助一些示例測試代碼?非常感謝!
看到這個,並嘗試它,它的工作原理!謝謝 –