¿Qué son los unit test?

A comienzos de 2016 apenas había oído hablar por encima de que existían ciertos mecanismos para probar las funcionalidades del código desarrollado de forma automática, ágil, repetitiva y sin necesitar demasiado tiempo para ello, pero no tenía ni idea de como hacer esto que parecía ser tan útil, a día de hoy lo hago como parte imprescindible de mis desarrollos.

Antes de saber qué era esto del “unit testing” el tiempo invertido en probar manualmente mis funcionalidades desarrolladas cada vez era mayor, y hacer pruebas de regresión de la aplicación cuando añadía o modificaba código era insostenible, prácticamente perdía mas tiempo probando mi aplicación que desarrollando nueva funcionalidad.

Esa situación junto a un cambio a un nuevo entorno profesional, donde el desarrollo de pruebas unitarias (Unit Test) era un requisito, hicieron que me pusiera manos a la obra en mi tiempo libre para mejorar este skill, aplicándolo actualmente en mis proyectos personales y profesionales.

Si este es también tu caso, intentaré facilitarte la labor de andar buscando información en diversas fuentes, con una sucesión de entradas que te permitan testear tu código de forma fácil y rápida, desde un punto de vista práctico.

El primer paso fue saber qué era y de qué iba esto del unit testing.

¿Qué es una prueba unitaria?

Una prueba unitaria o unit test no es más que un método que llama a funciones de tu código con unas determinadas entradas y valida si la salida es la esperada, o en caso no de existir salida, al menos valida que el resultado sea el esperado (como el lanzamiento o no de una excepción o la posible modificación de una variable). Al método o función que se pretende probar, se le conoce como sistema bajo prueba (System under test – SUT).

Ejemplo

Dejando a un lado la teoría voy a ser práctico, imagina que tienes un método que compara el contenido de 2 variables byte[], como pueda ser el RowVersion de un objeto complejo para controlar la concurrencia, del que hablo en esta entrada, y devuelve un resultado bool según sean o no iguales, de esta forma controlarás si tienes el citado problema de concurrencia.

Lo anteriormente descrito será un método “ValidateConcurrency”,  que pertenece por ejemplo a la clase ValidationService, como se aprecia a continuación.

Ese método es un SUT, quieres probar que el resultado es el esperado cuando:

  • RowVersionClient y RowVersionDatabase son iguales: Debería devolver true.
  • RowVersionClient y RowVersionDatabase no son iguales: Debería devolver false.
  • Si alguna de los dos parámetros de entrada no esta definido: Debería devolver false.

El siguiente código sería un ejemplo de testing para el anterior método. De momento no voy a entrar en detalles, solo quiero que veas qué es una serie unit tests.

Cuando ejecutamos los test, estos devolverán un resultado de éxito o fracaso, identificándose rápidamente por verde o rojo en Visual Studio, este resultado dependerá de que los Assert se cumplan. En este caso los assert simplemente verifican el resultado del método, un booleano.

En otra serie de entradas hablo sobre la ejecución de unit test, su análisis y su mantenimiento, te resultarán utiles como complemento a esta entrada para iniciarte en Unit Test. Al igual que si te ha llamado la atención el Data Annotation [Test], habló sobre él en esta entrada sobre la preparación del framework con Herramientas para Unit Test.

Ahora lo interesante es que veamos que el test ejecuta nuestro método con una entrada concreta, y devuelve un objeto bool result.

La instrucción Assert, es la que hace la verificación del resultado. En este caso, el método devuelve el resultado esperado en todos los casos, y por tanto el Assert será correcto y el test será verde.

Si modificamos el método del SUT, para que el resultado este negado, todos los test fallarán, indicando que el método no funciona como se espera de él.

Hasta aquí esta entrada, siendo una introducción básica para quitar el misticismo a eso de hacer “Unit Test”. Obviamente habrá casos mucho mas complejos, pero ya puedes ver que un test unitario no es otra cosa que código que sabrás manejar con una corta curva de aprendizaje.

Desde aquí espero que te animes a hacer unit test, ya que como te cuento en esta entrada tienen una gran importancia.

Deja un comentario