Я разрабатываю приложение на ASP.NET MVC 4. Я использую TDD-подход для разработки моего приложения. Вначале я пытаюсь реализовать модуль входа для приложения. Технически для входа в систему необходимо выполнить следующие действия:MVC Moq mutliple зависимостей
- Проверьте, что учетная запись пользователя не заблокирована и ее действительный пользователь. (Если пользователь пытается войти в систему несколько раз, он должен заблокировать учетную запись после 5 неудачных попыток. Для этого у меня есть полев моей базе данных, которое я обновляю после каждой неудачной попытки)
- Если учетная запись проверена, пользователь с loginId и пароль, используя стороннюю услугу.
- Если подтверждено, Пользователь должен быть перенаправлен на страницу индекса.
Для достижения этих задач, я создал:
// Interface, Controller will interact with
public Interface IAuthenticate
{
bool ValidateUser(string UserId,string Password);
}
// Class that implement IAuthenticate
public class Authenticate : IAuthenticate
{
private IVerifyUser loginVerify;
private IThirdPartyService thirdpartyService;
public Authenticate(IVerifyUser user,IThirdPartyService thirdparty)
{
this.loginVerify=user;
this.thirdpartyService=thirdparty;
}
public bool ValidateUser(string userId,string password)
{
if(loginVerify.Verify(userId))
{
if(thirdpartyService.Validate(userId,password))
return true;
else
return false;
}
else
return false;
}
}
Чтобы проверить мой контроллер Вход, я должен просто создать макет для IAuthenticate
или мне нужно создать макет для IVerifyUser
и IThirdPartyService
? ?
[TestMethod]
public void Login_Rerturn_Error_If_UserId_Is_Incorrect()
{
Mock<IAuthenticate> mock1 = new Mock<IAuthenticate>();
mock1.Setup(x => x.ValidateUser("UserIdTest", "PasswordTest"))
.Returns(false);
var results = controller.Login();
var redirect = results as RedirectToRouteResult;
Assert.IsNotNull(results);
Assert.IsInstanceOfType(results, typeof(RedirectToRouteResult));
controller.ViewData.ModelState.AssertErrorMessage("Provider", "User Id and Password is incorrect");
Assert.AreEqual("Index", redirect.RouteValues["action"], "Wrong action");
Assert.AreEqual("Home", redirect.RouteValues["controller"], "Wrong controller");
}
Любые рекомендации действительно оценены ??
Не могли бы вы предоставить более подробную информацию? Как бы я это сделал, любые рекомендации будут действительно оценены. – Faisal
Также, если мне нужно протестировать IVerifyUser и IThirdPartyService ?? – Faisal