Introduccion a Bashunit pruebas unitarias para tus scripts bash
28-12-2023
¡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
?
- Confianza en tu código: Las pruebas te dan confianza en que tu código funciona como esperas.
- 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.
- 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
- Assetions: Validar la entrada, salida y estado de comandos
- Testear ficheros y directorios temporales
- Medir cobertura de código
- Mocking
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!