Además de roundup y shunit2 mi visión general de las herramientas de pruebas unitarias Shell también incluye assert.sh y shelltestrunner.
En general, estoy de acuerdo con la crítica del autor de resumen de shunit2 (en parte, subjetiva), por lo que excluí shunit2 después de mirar la documentación y ejemplos. Aunque, parecía familiar tener alguna experiencia con jUnit.
En mi opinión, shelltestrunner es la herramienta más original que he analizado, ya que usa una sintaxis declarativa simple para la definición de caso de prueba. Como de costumbre, cualquier nivel de abstracción ofrece cierta comodidad a costa de cierta flexibilidad. Aunque la simplicidad es atractiva, encontré que la herramienta es demasiado limitada para el caso que tuve, principalmente debido a la falta de una manera de definir las acciones de configuración/desvío (por ejemplo, manipular archivos de entrada antes de una prueba, eliminar archivos de estado después de una prueba , etc.)
al principio estaba un poco confundido que assert.sh sólo permite afirmar la producción o el código de salida, mientras que tanto necesitaba. El tiempo suficiente para escribir un par de casos de prueba usando el rodeo. Pero pronto encontré inconveniente el modo set -e
del rodeo ya que se espera un estado de salida distinto de cero en algunos casos como medio para comunicar el resultado además de stdout, lo que hace que el caso de prueba falle en dicho modo. One of the samples muestra la solución:
status=$(set +e ; rup roundup-5 >/dev/null ; echo $?)
Pero lo que si necesito tanto el estado de salida distinto de cero y la salida? Pude, por supuesto, set +e
antes de la invocación y set -e
después o set +e
para todo el caso de prueba. Pero eso va en contra del principio del rodeo "Everything is an Assertion". Entonces sentí que comenzaba a trabajar contra la herramienta.
Para entonces me he dado cuenta "inconveniente" de la assert.sh de permitir sólo a valer ya sea el código de salida o salida es en realidad un problema no como acabo puedo pasar en test
con una expresión compuesta como esta
output=$($tested_script_with_args)
status=$?
expected_output="the expectation"
assert_raises "test \"$output\" = \"$expected_output\" -a $status -eq 2"
Como mis necesidades eran muy básico (ejecutar una serie de pruebas, muestre que todo ha ido bien o qué no), me gustó la simplicidad de assert.sh, así que eso es lo que elegí.
También puede comprobar bashtest util: https: // github.com/pahaz/bashtest (es una forma sencilla de escribir pruebas de bash) – pahaz
Roundup formaliza algunas tareas/etiquetas para usted. Una vez que superas la barrera del aprendizaje, es bastante útil. Personalmente, me gusta más el enfoque de haridsv, porque no requiere que instale otro paquete. He aplicado este enfoque a las pruebas de shell y python. – todo
Verifique esta visión general de casi todas las herramientas posibles: https://medium.com/wemake-services/testing-bash-applications-85512e7fe2de – sobolevn