Cuando escribo más que un guión trivial en bash, a menudo me pregunto cómo hacer que el código sea comprobable.Bash and Test-Driven Development
Normalmente es difícil escribir pruebas para el código bash, debido a que tiene pocas funciones que toman un valor y devuelven un valor, y altas funciones que verifican y configuran algún aspecto en el entorno, modifican el sistema de archivos, invocar un programa, etc. - funciones que dependen del entorno o que tienen efectos secundarios. Por lo tanto, el código de configuración y prueba se vuelve mucho más complicado que el código que prueban.
Por ejemplo, considere una simple función a prueba:
function add_to_file() {
local f=$1
cat >> $f
sort -u $f -o $f
}
Código de ensayo para esta función podría consistir en:
add_to_file.before:
foo
bar
baz
add_to_file. después de:
códigoy de prueba:
function test_add_to_file() {
cp add_to_file.{before,tmp}
add_to_file add_to_file.tmp
cmp add_to_file.{tmp,after} && echo pass || echo fail
rm add_to_file.tmp
}
Aquí 5 líneas de código son probados por 6 líneas de código de prueba y 7 líneas de datos.
Ahora consideremos un caso un poco más complicado:
function distribute() {
local file=$1 ; shift
local hosts=("[email protected]")
for host in "${hosts[@]}" ; do
rsync -ae ssh $file $host:$file
done
}
ni siquiera puedo decir cómo empezar a escribir una prueba para que ...
Entonces, ¿hay una buena manera de hacer TDD en scripts bash, o debería darme por vencido y poner mis esfuerzos en otra parte?
vea también: http://stackoverflow.com/questions/1339416/testing-bash-scripts –
Vea también: http://stackoverflow.com/questions/971945/unit-testing-for-shell-scripts – blong
de las herramientas existentes: https://medium.com/wemake-services/testing-bash-applications-85512e7fe2de – sobolevn