¿Que son los Test Unitarios y que necesitamos para llevarlos acabo en nuestros controladores?

Los Test Unitarios ( o Unit Test), son pruebas sencillas para aislar y comprobar diferentes partes de código. En este caso, los métodos dentro de los controladores, pudiendo encontrar los errores sencillamente, si los hubiera.

En este ejemplo, vamos a realizar tres pruebas, la ultima de ellas teniendo dos apartados. Las pruebas son las siguientes:

  • Verificar que el modelo que devuelto no es null.
  • Comprobar el contenido del ViewBag.
  • Comprobar las redirecciones son correctas.

Puesta a punto.

Antes de empezar, esta disponible el código del proyecto en mi dirección de GitHub, por si tienes alguna duda.

Para poder realizar estos test unitarios, tendremos que agregarlas al proyecto al crearlo, como muestro en la siguiente imagen.

Adding Test Units

Al haber realizado este paso, se nos habrá creado en el proyecto un apartado que contendrá nuestros test, con el nombre de nuestro proyecto .test, así, «NombreProyecto.Test«.

Solution-Explorer-Test

Para poder realizar todo esto, vamos a empezar creando un modelo Usuario dentro de la carpeta models ,Models > Click derecho Agregar > Clase, los atributos son opcionales, y podéis crear cualquier otro tipo de clase, esta es solo un ejemplo.

Clase Usuario

A continuación, añadiremos nuestro controlador UsuariosController, dentro de la carpeta controllers,
Controllers > Clickderecho > AgregarControlador, aquí añadiremos  nuestros usuarios ficticios.

Métodos del controler

En nuestro controlador, añadiremos un metodo llamado GetUsuarios(), de tipo List<Usuario>. Si sale un error en la Lista<Usuario>, nos ayudaremos de la bombilla que aparezca a la izquierda y añadiremos el using  NombreDelProyecto.Models para poder usar nuestra clase.

Bombilla

Crearemos la Lista<Usuario> vacía, a la cual añadiremos algunos usuarios y la devolveremos con el método.

Lista

Y creamos los diferentes métodos en los que vamos a realizar nuestros test, en este caso ya que vamos a realizar test, no serian necesarias las vistas, ya que nuestro cometido es comprobar que no haya errores en el controler, no la visualización de los resultados.

La primera en este caso sera el método ModeloUsuario, la cual nos devolverá una vista con un modelo.

Modelo

El segundo ejemplo serian los test para comprobar la autenticidad del contenido del ViewBag. Crearemos un método llamado ListaUsuarios, el cual almacenara la lista de usuarios en el ViewBag.

View

Y por ultimo, un metodo para comprobar la correcta re-dirección de un RedirectToAction(). En este caso, le llamare Login y creare un método adicional para hacer el post, con dos parámetros, nombre y contraseña. Dentro de este método, obtendremos la lista de usuarios, y comprobaremos si algún usuario coincide con el nombre y la contraseña, si es así, le mostraría la lista de usuarios, y si no, le re-direccionaria otra vez al login.

Login

Y ahora, !Los test!

Dentro de nuestro apartado de test, se habra creado una carpeta llamada Controllers, haremos click derecho y agregaremos una prueba unitaria, con el nombre que queramos, en mi caso TestUnitario.

add test

Como podéis ver, ahora mismo todos los test que yo he creado, dan un resultado satisfactorio.

test correctos

Ahora vamos a crear dichos test, y os enseñare en cada uno algunos errores. Para que se pueda ver el uso real de los test.

Para el primer test, he elegido el nombre de Testing_Model, dentro de este test, llamaremos a nuestro controlador, con este a nuestra vista, y de la vista sacaremos el modelo. Después usaremos Assert.IsNull para comprobar que no devuelve un null.

modelo test ok

Si por ejemplo, no se enviase en el método ModeloUsuarios, del controlador, el modelo, en este test nos daría un error.

error

Ahora para el segundo ejemplo, el test Testing_ViewBag, en el cual, obtendremos la lista de usuarios del controler, y comprobaremos, con Assert.AreEqual(), que tanto el primer usuario de la lista creada por el controller y el guardado en el ViewBag son iguales.

Test_view

Si el programador del controller, hubiese llamado al viewbag, Usuario, en vez de Usuarios tendríamos un error. Hay que tener cuidado.

View error

Finalmente, en nuestro ultimo ejemplo, redirecciones, creare dos metodos, uno, Testing_Redirect_With_An_Existing_User(), para usuarios en la lista, re-direccionados a la visualización de la lista, y otro método, Testing_Redirect_With_An_User_That_Dont_Exist(), con un usuario que no existe, redireccionado nuevamente a la vista login.

Test Login

Como podéis comprobar en la imagen, RedirectToRouteResult  para almacenar la ruta, después de enviarle al método login del controler un usuario real y uno ficticio, para así comprobar que ambas rutas funcionan, y que se devuelven correctamente. Si hubiéramos escrito mal la ruta, o no se estuvieran re-direccionando bien, podríamos comprobarlo con este test.

Login Error

Y esto serian los test unitarios, o unit test. Espero haber conseguido aclarar algunas de sus dudas.

Un saludo y a testear!

Información

Autor/a: Javier Sánchez de Lago

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2018-2019

CódigoEnlace a GitHub

Otros enlaces: Linkedin, buenas practicas para los unit test.

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.