Los Test Unitarios para un controlador en ASP.NET MVC
¿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.
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«.
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.
A continuación, añadiremos nuestro controlador UsuariosController, dentro de la carpeta controllers,
“Controllers > Clickderecho > Agregar> Controlador”, 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.
Crearemos la Lista<Usuario> vacía, a la cual añadiremos algunos usuarios y la devolveremos con el método.
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.
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.
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.
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.
Como podéis ver, ahora mismo todos los test que yo he creado, dan un resultado satisfactorio.
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.
Si por ejemplo, no se enviase en el método ModeloUsuarios, del controlador, el modelo, en este test nos daría un 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.
Si el programador del controller, hubiese llamado al viewbag, Usuario, en vez de Usuarios tendríamos un error. Hay que tener cuidado.
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.
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.
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
Otros enlaces: Linkedin, buenas practicas para los unit test.