Que son las pruebas unitarias e importancia de estas

¿No sabes nada sobre las pruebas unitarias?, no te preocupes que hoy te haremos una introducción

Rodríguez Patiño, Eduardo
2020-10-01 | 832 lecturas

Hoy día vamos hablar sobre la importancia de las pruebas unitarias o unit testing en nuestros proyectos de desarrollo de software.

¿Qué son?

Las pruebas unitarias o unit testing lo que busca es corroborar el comportamiento correcto de una unidad de código.

En pocas palabras y lo más usual sería revisar el flujo correcto de los métodos de nuestras clases a través de pruebas que vamos a definir para corroborar que el método se comporte de la manera esperada antes distintos escenarios. Asimismo, si más adelante se modifica nuestro método, se tendrá que corroborar los cambios a través de las pruebas unitarias para que se acepte la modificación.

¿Son importante?

Definitivamente si y cuanto más ántes se logren implementar será mejor para nuestros proyectos, ya que nos va a beneficiar en costo/tiempo.

Cierto grupos desarrolladores están en contra de ellas porque dicen que es una perdida de tiempo y a la vez suman al hecho que su código es a prueba de balas.

  • Si bien es cierto que implementar dichas pruebas demandan más tiempo, el implementarlas en un comienzo ayudán mucho a reducir este impacto.
  • El código de nuestro desarrollador puede ser muy bueno pero él no tomó en cuenta que su método puede ser modificado más adelante por otra persona, y sin un respaldo de las pruebas unitarias no se podrá validar los cambios realizados.
  • El definir las pruebas unitarias ayudan más adelante a definir otros tipos de pruebas como las pruebas de integración.

Ventajas de las pruebas unitarias

  • Ayudan a detectar errores que no contemplamos en nuestra fase de desarrollo.
  • Son un respaldo para futuros cambios en la lógica de nuestros métodos o funciones.
  • Mejora la calidad de nuestro código, ya que constantemente estaremos ejecutando pruebas unitarias.
  • Sirven como documentación del proyecto.
  • Nos beneficiamos en esfuerzo y tiempo, porque si la prueba ya están implementada revisar el nuevo código estará en función a lo que dure la prueba unitaria que usualmente es milisegundos.

Las 3 "A"

Cada caso de prueba debe implementar las siguientes 3 "A" para que se puedan ejecutar con éxito.

  • Arrange (Organiza): organiza tu prueba para que se pueda comenzar con las pruebas ya sea creando los parámetros u objetos mock (objetos ficticios que facilitan las pruebas) para tu método o función.
  • Act (Actua): realiza la llamada a tu método o función.
  • Assert (Confirmar): corroborá que el método o función probado se comporte de la manera esperada.

¿Cómo crear una prueba unitaria de manera correcta?

Veamos un ejemplo conceptual sin entrar en detalle en la tecnología para que puedas tener más claro esto.

Caso práctico

Tenemos que crear una clase que permita a nuestro usuario autenticarse con el sistema.

class IdentityService {
    public bool SignIn(string email, string password) {
        // ToDo
    }
}

Lo usual es que luego de crear el método hacemos un prueba a través del debugger del proyecto y si con esto funciona es más que suficiente para nosotros.

Pero te hago algunas preguntas que tal ves no consideraste o te dió pereza testear:

  • ¿Qué pasaría si paso el e-mail como null?
  • ¿Qué pasaría si paso el password como null?
  • ¿Qué pasaría si el usuario no puede autenticarse?, según el método se esperaría un boolean == False.

Necesitamos pruebas unitarias

A través de las preguntas formuladas podemos crear nuestra primera prueba unitaria que será le encargada de corroborar la funcionalidad del método de autenticación. Si en futuro modificamos dicho método la corroboración de este será más simple porque bastará con un click para ejecutar todas las pruebas planteadas.

  • El esfuerzo será al comienzo, luego todo será automatizado.
  • Será más sencillo encontrar bugs, porque hasta que la prueba no se cumpla no podemos aprobar la credibilidad del método.

¿Ejemplos con alguna tecnología?

Esto lo estaremos viendo en las siguientes publicaciones ya sea con PHP, .NET o JavaScript.