Quando si scrive più di uno script banale in bash, mi chiedo spesso come rendere il codice verificabile.Sviluppo Bash e Test-driven
In genere è difficile scrivere test per codice bash, poiché è basso sulle funzioni che assumono un valore e restituiscono un valore e su funzioni che controllano e impostano alcuni aspetti nell'ambiente, modificano il valore file system, richiama un programma, ecc. - funzioni che dipendono dall'ambiente o hanno effetti collaterali. In questo modo il codice di setup e test diventa molto più complicato del codice che testano.
Ad esempio, si consideri una semplice funzione di prova:
function add_to_file() {
local f=$1
cat >> $f
sort -u $f -o $f
}
Codice di prova per questa funzione potrebbe consistere in:
add_to_file.before:
foo
bar
baz
add_to_file. dopo:
codiceE prova:
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
}
Qui 5 linee di codice sono testati da 6 righe di codice di prova e 7 linee di dati.
Consideriamo ora un caso un po 'più complicato:
function distribute() {
local file=$1 ; shift
local hosts=("[email protected]")
for host in "${hosts[@]}" ; do
rsync -ae ssh $file $host:$file
done
}
Non posso nemmeno dire come avviare scrivere un test per questo ...
Quindi, c'è un buon modo per fare TDD in script bash, o dovrei rinunciare e mettere i miei sforzi altrove?
vedere anche: http://stackoverflow.com/questions/1339416/testing-bash-scripts –
Vedere anche: http://stackoverflow.com/questions/971945/unit-testing-for-shell-scripts – blong
Panoramica degli strumenti esistenti: https://medium.com/wemake-services/testing-bash-applications-85512e7fe2de – sobolevn