Ejemplos de Bats para testear scripts
Puedes crear un archivo .bats para cada uno de estos ejemplos y ejecutar las pruebas con Bats. Asegúrate de tener Bats instalado en tu sistema antes de comenzar.
Prueba básica de éxito
Supongamos que tienes un script llamado my_script.sh que simplemente imprime «Hola, mundo!» en la pantalla. Puedes escribir una prueba Bats para verificar que el script produce la salida correcta.
# hello_world_test.bats
@test "Verificar que el script produce 'Hola, mundo!'" {
run bash my_script.sh
[ "$status" -eq 0 ]
[ "$output" = "Hola, mundo!" ]
}
Luego, ejecuta las pruebas con bats hello_world_test.bats.
Prueba de fallo
Imagina que tienes un script llamado division.sh que realiza una división. Puedes escribir una prueba que verifica cómo maneja el script un escenario de división por cero.
# division_test.bats
@test "Verificar que el script maneja la división por cero" {
run bash division.sh 10 0
[ "$status" -ne 0 ]
[ "$output" = "Error: División por cero" ]
}
Prueba de manejo de argumentos
Si tu script acepta argumentos de línea de comandos, puedes escribir pruebas para verificar que los argumentos se manejen correctamente.
# arguments_test.bats
@test "Verificar que el script maneja argumentos correctamente" {
run bash my_script.sh arg1 arg2
[ "$status" -eq 0 ]
[ "$output" = "Argumentos: arg1, arg2" ]
}
Pruebas para funciones de script
Si tu script contiene funciones, también puedes escribir pruebas específicas para esas funciones.
# functions_test.bats
@test "Verificar que la función suma funciona correctamente" {
run bash my_script.sh suma 3 5
[ "$status" -eq 0 ]
[ "$output" = "8" ]
}
Pruebas negativas
Además de probar el comportamiento correcto, también puedes escribir pruebas para situaciones incorrectas o inesperadas.
# negative_test.bats
@test "Verificar que el script maneja argumentos insuficientes" {
run bash my_script.sh
[ "$status" -ne 0 ]
[ "$output" = "Error: Argumentos insuficientes" ]
}
Prueba genérica
El siguiente ejemplo genérico incluye una variedad de pruebas comunes que puedes adaptar para probar tus scripts de shell, incluyendo las anteriores y con alguna más.
#!/usr/bin/env bats
# Prueba de manejo de argumentos
@test "Verificar que el script maneja argumentos correctamente" {
run bash my_script.sh arg1 arg2
[ "$status" -eq 0 ]
[ "$output" = "Argumentos: arg1, arg2" ]
}
# Prueba de argumentos insuficientes
@test "Verificar que el script maneja argumentos insuficientes" {
run bash my_script.sh
[ "$status" -ne 0 ]
[ "$output" = "Error: Argumentos insuficientes" ]
}
# Prueba de una función específica del script
@test "Verificar que la función suma funciona correctamente" {
run bash my_script.sh suma 3 5
[ "$status" -eq 0 ]
[ "$output" = "8" ]
}
# Prueba de fallo de una función específica del script
@test "Verificar que la función suma falla con argumentos incorrectos" {
run bash my_script.sh suma 3 "abc"
[ "$status" -ne 0 ]
[ "$output" = "Error: Argumentos no numéricos" ]
}
# Prueba de manejo de errores
@test "Verificar que el script maneja errores correctamente" {
run bash my_script.sh error_case
[ "$status" -ne 0 ]
[ "$output" = "Error: Caso de error" ]
}
# Prueba de una ejecución exitosa
@test "Verificar que el script produce la salida esperada" {
run bash my_script.sh success_case
[ "$status" -eq 0 ]
[ "$output" = "Éxito" ]
}
# Prueba de manejo de archivos
@test "Verificar que el script crea un archivo de salida" {
run bash my_script.sh generate_file
[ "$status" -eq 0 ]
[ -f "output.txt" ]
run rm "output.txt"
[ "$status" -eq 0 ]
[ ! -f "output.txt" ]
}
Lo dicho, asegúrate de ajustar el nombre del script (my_script.sh) y las salidas esperadas en cada prueba según las necesidades.