UNIT TEST EN MVC
Pruebas unitarias en MVC Visual Studio
Un test unitario o Unit Test, es una prueba. Sirve para comprobar que tu programa funciona correctamente, más concretamente tus controladores.
Para poder empezar con el test, MIENTRAS creáis vuestro proyecto tendréis que seleccionar la opción de “Agregar pruebas unitarias”, como en la imagen.
Una vez lo tengáis, veréis a la derecha de vuestro proyecto un apartado que será ComoLlameisAlProyecto.Test
Y con eso ya estaríamos listos para empezar.
El primer ejemplo será una lista de la compra, para este primero en la carpeta «Models > Click derecho > Agregar > Clase”, crearemos una clase llamada productos, la cual tendrá los siguientes atributos.
Podéis poner los atributos que queráis, da igual.
A continuación, en la carpeta “Controllers > Click derecho > Agregar > Controlador”, creamos un controlador al que llamaremos ProductosController para diferenciar, al hacerlo veremos a la derecha que se nos ha creado una carpeta llamada Productos dentro de la carpeta Views.
Es en este controlador donde agregaremos/creamos nuestros productos, donde los “inicializaremos”.
Para ello creamos un método llamado GetProductos() de tipo List<Productos>. Si os sale un error en Productos, pincháis en Productos y le dais a la bombilla que aparezca a la izquierda y seleccionamos using ComoSeLlameElProyecto.Models
Cuando lo tengamos nos creamos el método de la siguiente manera:
Esto lo que hace es añadir los productos a la lista y devolverlos con el return, ya que no se trata de un método void.
Posteriormente en el ActionResult de Index (crearlo si no lo tenéis), llamamos a este método, lo guardamos en una variable de tipo List<Productos> (igual que el método) y mandamos los productos a la vista.
Para los test unitarios las vistas no son importantes, por eso me abstendré de crearlas, pero si la creáis veréis los productos que hayáis puesto, no tiene más.
Ahora sí, vamos a los test.
ComoSeLlameElProyecto.Test
En la carpeta “Controller > Click derecho > Agregar > Prueba unitaria”, creamos el correspondiente test unitario con el nombre que queramos.
Veréis que tenéis una TestClass y un TestMethod, esto es lo que indica que se trata de una prueba.
Si queréis, renombrar el TestMethod de manera que os resulta más intuitivo, por ejemplo en este caso, IndexTest().
Dentro de este método primero tendremos que llamar al Controlador ProductosController
Luego debemos crearnos un objeto de tipo ViewResult para poder guardarnos lo que devuelva el ActionResult de, en este caso, Index.
Y para acabar, mediante Assert indicamos condiciones. Si escribís Assert y a continuación un . veréis lo que ofrece.
Para este caso usaremos Assert.IsNotNull para comprobar que no nos devuelve un NULO, de ser así, saltaría el correspondiente error.
El código completo:
Ahora para probarlo, en la barra de menú que está arriba en el Visual, pulsáis en “Pruebas > Ejecutar > Todas las Pruebas”. A la izquierda nos aparecerá el explorador de pruebas y podremos ver que todo ha salido bien.
Si en el TestMethod de Index pusiéramos lo siguiente:
Estaríamos indicando que obligatoriamente tiene que devolvernos un Modelo, si en el ActionRestult de Index, en return View, borramos lo de dentro del paréntesis y volvemos a ejecutar las pruebas:
Como podemos comprobar, salta el error.
Y este sería el primer ejemplo. En el segundo vamos a ver cómo funcionan los test para ViewBag y ViewData.
Para ello nos crearemos un ActionResult llamado, por ejemplo, Vistas en ProductosController.
Este solo va a tener un ViewData[“LlamarloComoQuerais”] y un ViewBag.LlamarloComoQuerais a los que guardaremos lo que queramos, en este caso yo guardo “Alcachofas” y “Berenjenas” respectivamente.
Y nos vamos al test.
En este escribimos lo mismo que para el Index, solo que en vez del Assert ser IsNotNull, será AreEqual para comprobar lo que tenemos almacenado en ViewData y ViewBag.
Si nos equivocamos al escribir y ponemos Alcachofa o Berenjena (en singular), al ejecutar las pruebas nos dará error.
En el último ejemplo vamos a ver cómo usar el test con redirecciones.
En ProductosController agregamos un ActionResult llamado Redirección. A este le paso una id ficticia para que se vea mejor el ejemplo.
Si es igual a cero enviaremos al usuario al Index de Home, sino, devolvemos la correspondiente vista.
En el test hacemos lo mismo que para el de Vistas con la diferencia de que no habrá ViewResult, en su lugar pondremos RedirectToRouteResult para almacenar la ruta.
En el AreEqual ponemos RouteValues[“action”] y RouteValues[“controller”] ya que las vistas funcionan de la manera Controller/Action, en este caso el action es Index y su controlador es Home pero podríamos haber puesto Index y Productos.
Y esto sería todo, como podéis ver estos ejemplos son muy sencillos de hacer, pero si queréis profundizar más os insto a ver Unit Test con ModelBinder o con Effort para conectarlo a tu base de datos, por ejemplo.
Un saludo y a darle caña.
Autor/a: Carlos Crespo Oviedo
Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin
Centro: Tajamar
Año académico: 2017-2018
Código: Enlace a GitHub
buenas tardes, excelente blog, muchas gracias