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.

creando proyecto

Una vez lo tengáis, veréis a la derecha de vuestro proyecto un apartado que será ComoLlameisAlProyecto.Test

unit 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 ModelsClick derecho > Agregar > Clase, crearemos una clase llamada productos, la cual tendrá los siguientes atributos.

clase productos

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

fallo productos

Cuando lo tengamos nos creamos el método de la siguiente manera:

lista productos

lista productos

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.

ActionResult Index

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

test method controller

Luego debemos crearnos un objeto de tipo ViewResult para poder guardarnos lo que devuelva el ActionResult de, en este caso, Index.

ViewResult

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.

assert

El código completo:

test method index

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.

test exitoso

Si en el TestMethod de Index pusiéramos lo siguiente:

Test Method Index

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:

test fallido

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.

ActionResult Vistas

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.

Test Method Vistas

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.

ActionResult Redireccion

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.

RedireccionTest

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