33 - Unit Test Con MVC
33 - Unit Test Con MVC
Para que esta metodología funcione, el código tiene que estar lo suficiente
estructurado como para poder crear unit test que prueben pequeñas partes de la
funcionalidad y si todos los elementos de una lógica coinciden.
En software una prueba unitaria no es más que una clase con algún método que
permite probar otro método, para evaluar el resultado se utilizan Asserts
(afirmaciones), del siguiente modo: sabemos que el método Pow de la clase Math
nos dará como resultado "a" elevado a "b", bien para probarlo escribiríamos el
siguiente código:
Las pruebas unitarias son de mucha ayuda, permiten detectar problemas de diseño,
nos ayudan a hacer código más atómico, a tener componentes probados antes de la
integración, pero es necesario detenerse a pensarlas un momento para que sean
correctas.
1
MVC ASP NET
2
MVC ASP NET
HOMECONTROLLERTEST.CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ProyectoPruebasUnitarias;
using ProyectoPruebasUnitarias.Controllers;
namespace ProyectoPruebasUnitarias.Tests.Controllers
{
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void Index()
{
// Arrange
3
MVC ASP NET
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
[TestMethod]
public void About()
{
// Arrange
HomeController controller = new HomeController();
// Act
ViewResult result = controller.About() as ViewResult;
// Assert
Assert.AreEqual("Your application description page.",
result.ViewBag.Message);
}
[TestMethod]
public void Contact()
{
// Arrange
HomeController controller = new HomeController();
// Act
ViewResult result = controller.Contact() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
}
}
Para que una clase sea parte de la prueba unitaria, debe contener la siguiente
decoración:
4
MVC ASP NET
Mediante Assert, podemos comprobar si los resultados son los esperados, por
ejemplo, si enviamos un modelo a una vista, si el producto final es el adecuado o si
coinciden los elementos de la lógica con un producto final.
Para realizar las pruebas, debemos ir al menú Test Run All Test
En la ventana Test Explorer, podremos comprobar que todos los resultados son los
correctos:
Ahora vamos a realizar un ejemplo práctico para comprobar que una vista recibe un
modelo o que estamos enviando un dato adecuado a la vista en ViewBag.
Proyecto MVC.
PERSONA.CS
5
MVC ASP NET
PERSONASCONTROLLER.CS
using ProyectoPruebasUnitarias.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace ProyectoPruebasUnitarias.Controllers
{
public class PersonasController : Controller
{
public List<Persona> GetPersonas()
{
return new List<Persona>{
new Persona
{
Id = 1,
Nombre = "Adrian",
Apellidos = "Garcia",
Edad = 23
},
new Persona
{
Id = 2,
Nombre = "Lucia",
Apellidos = "Ramos",
Edad = 15
},
new Persona
{
Id = 3,
Nombre = "Vitorino",
Apellidos = "Lopez",
Edad = 31
},
new Persona
{
Id = 4,
Nombre = "Luis",
Apellidos = "Gallego",
Edad = 34
},
};
}
// GET: Personas
public ActionResult Index()
{
return View();
}
6
MVC ASP NET
Sobre la carpeta Views, nos habrá creado una vista llamada Personas.
Añadimos una nueva Vista llamada MostrarPersonas y seleccionamos Layout List y
Model Persona.
Proyecto Test
Sobre la carpeta Controllers, creamos una nueva clase Unit Test llamada
PersonasControllerTest.
PERSONASCONTROLLERTEST.CS
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ProyectoPruebasUnitarias.Controllers;
using System.Web.Mvc;
using System.Collections.Generic;
using ProyectoPruebasUnitarias.Models;
namespace ProyectoPruebasUnitarias.Tests.Controllers
7
MVC ASP NET
{
[TestClass]
public class PersonasControllerTest
{
[TestMethod]
public void MostrarPersonas()
{
//CREAMOS EL CONTROLADOR
PersonasController controller = new PersonasController();
//CAPTURAMOS LOS RESULTADOS
//DE LA LLAMADA AL ACTIONRESULT
ViewResult result = controller.MostrarPersonas() as ViewResult;
//COMPROBAMOS QUE DEVUELVE LA VISTA
Assert.IsNotNull(result);
}
}
}
8
MVC ASP NET
Pongamos que devolvemos una lista con una condición, tampoco pasaríamos la
prueba Test debido a que deseamos que siempre se reciban personas en la vista
MostrarPersonas.
Y ejecutamos Unit Test, veremos que los resultados son los mismos, ya que
comprueba que el objeto Model podría ser NULL en algún momento,
independientemente que se cumpla la condición o no.