Я пытаюсь написать модульный тест для создания нового пользователя и проверки того, что происходит желаемое перенаправление. Вот мое Register
действие, которое в значительной степени является готовым кодом из шаблона VS:
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError(String.Empty, ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
И вот мой тест с использованием Moq. Независимо от того, что я установил, я всегда получаю сообщение об ошибке по умолчанию MembershipCreateStatus
. Например:
Предоставленный пароль недействителен. Пожалуйста, введите правильный пароль
или
Предоставлен неверный ответ для получения пароля
Я пытался изменить метод CreateUser
так, чтобы он вызывал только имя пользователя, пароль и перегрузку электронной почты, но это не имеет значения. Как будто где-то есть проверка, которая применяет политику паролей.
public void RegisterPost_WithAuthenticatedUser_RedirectsToHomeControllerIfSuccessful()
{
// Arrange
var accountController = new AccountController();
var mockContext = GetMockRequestContext();
ControllerContext controllerContext = new ControllerContext(mockContext.Object, accountController);
accountController.ControllerContext = controllerContext;
RegisterModel registerModel = new RegisterModel() { UserName = "someone", Email = "someone@example.com", Password = "user", ConfirmPassword = "password" };
// Act
var result = accountController.Register(registerModel);
// Assert
Assert.That(result.RouteData.Values["Controller"], Is.EqualTo("Home"));
Assert.That(result.RouteData.Values["Action"], Is.EqualTo("Index"));
}
Может кто-нибудь сказать мне, что здесь происходит?