leanmind logo leanmind text logo

Blog

BDD

Behaviour-driven Development es una técnica para tomar mejores requisitos de producto.

Introduccion a Bashunit pruebas unitarias para tus scripts bash

Por Ricardo García Dorta

¡Saludos a todos los aficionados al scripting! Ya saben que en Lean Mind nos encanta tener nuestra base de código testeada como dios manda, por eso en el día de hoy, vamos a sumergirnos en el mundo de las pruebas unitarias para scripts Bash, utilizando una herramienta llamada bashunit. Si alguna vez has escrito scripts de Bash y te has preguntado cómo asegurarte de que funcionen correctamente, ¡este artículo es para ti!

¿Qué es bashunit?

bashunit es una herramienta diseñada para escribir y ejecutar pruebas unitarias para scripts escritos en Bash. Su propósito es validar que cada “unidad” de tu código funcione como se espera.

¿Por qué usar bashunit?

  1. Confianza en tu código: Las pruebas te dan confianza en que tu código funciona como esperas.
  2. Desarrollo dirigido por pruebas (TDD): Si nos conoces ya sabes de lo que hablo y si no, en nuestro blog puedes encontrar varios artículos centrados en este tema.
  3. Refactorización segura: Al hacer cambios, las pruebas te ayudan a asegurarte de que no rompas la funcionalidad existente. Este concepto se conoce como “Parallel change”.

Ejemplo básico de bashunit

    # math_functions.sh
    function sumar() {
      echo $(($1 + $2))
    }

    # test_math_functions.sh
    source bashunit.sh
    source math_functions.sh

    function test_sumar_basic() {
      local result=$(sumar 3 4)
      bashunit.test.assert_equals 7 $result
    }

    bashunit.test.run_tests

Casos de uso comunes

Mocking con bashunit

El “mocking” es una técnica que te permite simular el comportamiento de funciones o comandos reales en tus pruebas, para que puedas concentrarte en probar la lógica de tu código sin depender de comportamientos externos.

Consideremos el siguiente ejemplo:

    # En tu código
    function my_grep() {
      grep $@
    }

    function my_function_that_uses_grep() {
      if my_grep "val" $1; then
        return 1
      fi
      return 0
    }

    # En tu prueba
    bashunit.test.mock.returns "my_grep" 0
    bashunit.test.assert_return "my_function_that_uses_grep" 1

Aquí, my_grep es simplemente una envoltura alrededor del comando grep real. Sin embargo, en la prueba, no queremos depender del comportamiento real de grep, así que lo “mockeamos” para que siempre devuelva 0 (indicando éxito). Luego, probamos my_function_that_uses_grep para ver cómo se comporta cuando my_grep tiene éxito. Esta es la esencia del mocking: simular comportamientos para crear escenarios de prueba controlados.

Conclusión

Las pruebas unitarias son esenciales para un desarrollo robusto y confiable. Con herramientas como bashunit, puedes llevar las pruebas unitarias a tus scripts Bash, asegurando que funcionen en diversos escenarios. Ya sea que necesites simular comportamientos con “mocking”, trabajar con archivos temporales, o medir la cobertura de tu código, bashunit te brinda las herramientas necesarias para hacerlo. ¡Feliz scripting y pruebas!

Para aquellos interesados en profundizar en bashunit y explorar todas sus características, pueden visitar el repositorio oficial en GitHub y su X (Twitter) donde son muy activos.

Si no conoces, o quieres darle una vuelta de tuerca a los conceptos de testing, ¡en nuestro blog y redes puedes encontrar más contenido!

Publicado el 28/12/2023 por
Ricardo image

Ricardo García Dorta

¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.

Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?

Impulsamos el crecimiento profesional de tu equipo de developers