Soy nuevo en pruebas unitarias y estoy tratando de probar algunas de mis cosas de membresía de .NET que he estado escribiendo.¿Cómo puedo probar la membresía de Asp.net?
Así que estoy tratando de verificar mi método VerifyUser
que comprueba si las credenciales de los usuarios son válidas o no.
Así que esto es lo que parece:
public bool VerifyUser(string userName, string password)
{
bool valid = Membership.ValidateUser(userName, password);
return valid;
}
Y ahora cada vez que paso la prueba de la unidad falla. Sé que estoy pasando las credenciales correctas y esas cosas. Entonces me di cuenta de que tal vez mi Proyecto de Prueba (que está bajo la misma Solución que mi proyecto real) podría necesitar su propio archivo web.config
con la cadena de conexión y esas cosas. O un archivo de configuración de la aplicación tal vez porque es un proyecto de la Biblioteca de aplicaciones.
¿Solo copio el archivo web.config
de mi proyecto real y lo llamo un día? ¿O debería solo tomar partes de él? ¿O estoy solo lejos?
Mi base de datos está utilizando una base de datos personalizada con la membresía .net combinada con mi base de datos. Entonces en mi archivo de configuración tuve que especificar un ManagerProvider y un roleProvider.
Así es como mi prueba de la unidad parece
[Test]
public void TestVerifyUser()
{
AuthenticateUser authenitcate = new AuthenticateUser();
bool vaild = authenitcate.VerifyUser("chobo3", "1234567");
Assert.That(vaild, Is.True);
}
también más adelante que tengo en uno de mis asp.net mvc Métodos ActionResult (Ver la sesión para ser exactos) tengo esto:
FormsAuthentication.RedirectFromLoginPage (loginValidation.UserName, rememberMe);
Entonces, ¿cómo puedo escribir una prueba de unidad que haría lo que un usuario haría? Supongamos que comienzan en la página de inicio y luego hacen clic en la página de inicio de sesión e inician sesión con éxito. Quiero que sean redirigidos a la página de inicio.
No estoy seguro de cómo representar eso en el código. Estoy bastante seguro de que el RedirectFromLoginPage
funciona y eso es lo que realmente estoy probando. Estoy probando el hecho de que tengo 3 cosas que pueden suceder en el método de inicio de sesión ActionResult
.
- El usuario inicia sesión y se le envía de vuelta de donde vino.
- El usuario no puede iniciar sesión y se le devuelve al
LoginView
y ve los mensajes de error. - El usuario ha intentado acceder a un lugar seguro y ha sido redirigido a la página de inicio de sesión. Si el inicio de sesión con éxito será redirigido a la página segura a través de ReturnUrl.
Así que quiero hacer una prueba para ver si funcionan como deberían. De modo que es por eso que necesito que el usuario venga desde la página de inicio para ver si se les redirige a ella más tarde y si provienen de una página segura se redireccionarán a eso más adelante.
También estoy por cierto usando NUnit 2.5 y VS2008 Pro.
Esto es lo que estoy tratando de probar. Estoy en la parte donde trato de ver si el usuario es válido o no (la declaración if). No tengo ni idea de cómo probarlo.
public ActionResult Login(string returnUrl, FormCollection form, bool rememberMe)
{
LoginValidation loginValidation = new LoginValidation();
try
{
UpdateModel(loginValidation, form.ToValueProvider());
}
catch
{
return View("Login");
}
if (ModelState.IsValid == true)
{
bool valid = authenticate.VerifyUser(loginValidation.UserName, loginValidation.Password);
if (valid == false)
{
ModelState.AddModelError("frm_Login", "Either the Password or UserName is invalid");
}
else if (string.IsNullOrEmpty(returnUrl) == false)
{
/* if the user has been sent away from a page that requires them to login and they do
* login then redirect them back to this area*/
return Redirect(returnUrl);
}
else
{
FormsAuthentication.RedirectFromLoginPage(loginValidation.UserName, rememberMe);
}
}
return View("Login");
}
Lo siento, no entiendo la "Convención sobre el enfoque de configuración" leí acerca de burla en el libro que tengo.¿Tiene algo que ver con el uso de interfaces o algo así? Encontré este enlace pero supongo que no funcionará para mí ya que estoy usando Nunit y él está usando MbUnit? http://aspalliance.com/1590 – chobo2
@ chobo2 Le explicaré cómo usarlo. Los marcos burlones definitivamente tienen una inclinación hacia el uso de interfaces, y por buenas razones. El uso de interfaces proporciona un buen desacoplamiento. Sin embargo, no está obligado a utilizar interfaces en todos los marcos de burla. Además, NUnit y MbUnit son similares en muchas formas, por lo que algo que se hace en MbUnit probablemente tenga un paralelo con NUnit. Vale la pena investigar un poco. – Joseph
Ok gracias. Todavía no entiendo las interfaces y realmente no tengo idea con ellas cuando se trata de pruebas unitarias. Entonces, con suerte, uno de estos marcos lo hará un poco más fácil. ¿Cuál recomiendan? Veo que "Moq" usa linq sytanx, así que no estoy seguro si es correcto de ese bate si eso será bueno para mí ya que no sé mucho sobre linq. Además, ¿cómo funcionan estos marcos con nunit? Al igual que todavía uso nunit para ejecutar mi prueba o qué? – chobo2