SGCG

…esto no es un subtítulo…

Ir a: contenido categorías calendario archivo suscripción

Volver arriba

Sistema elemental de pruebas unitarias para el lenguaje de programación C (2)

2015-06-21

En el último artículo vimos uno de los sistemas de pruebas unitarias más sencillos que puede haber para el lenguaje de programación C. Es una cosa minimalista que preparé para algunos proyectos pequeños. El sistema consiste simplemente en una macro que llama a una prueba unitaria (un procedimiento que devuelve si la prueba ha salido bien o mal) e imprime el resultado. Esto es suficiente a veces, pero en otras ocasiones se echa en falta alguna pequeña estadística. Podemos hacerlo bien con macros un poco más complicadas o procesando con una herramienta externa. Hoy vamos a ver la segunda opción.

El sistema de pruebas unitarias imprime una línea por prueba ejecutada. Las pruebas exitosas aparecen como PASS:, un espacio y el nombre de la prueba. Las pruebas fallidas aparecen como FAIL:, un espacio y el nombre de la prueba. Como el formato es tan sencillo, es trivial hacer un programa de filtrado que lleve la cuenta de qué pruebas han salido bien y qué pruebas han salido mal. El siguiente script de awk, que funciona en sistemas tipo *nix, hace este trabajo e imprime cuántas pruebas han salido bien y cuántas pruebas han salido mal:

BEGIN { count["PASS:"] = 0 count["FAIL:"] = 0 } { count[$1] += 1 print } END { print "============================================================================" print "Testsuite summary" print "============================================================================" print "# TOTAL: ", count["PASS:"] + count["FAIL:"] print "# PASS: ", count["PASS:"] print "# FAIL: ", count["FAIL:"] print "============================================================================" if (count["FAIL:"] == 0) exit 0 else exit 1 }

Este script está pensado para procesar la salida del programa de pruebas unitarias. Cada línea de dicha salida empieza bien por PASS:, bien por FAIL:. El script usa una matriz asociativa para llevar la cuenta de cuántas líneas empiezan por cada palabra. Cuando la salida del programa de pruebas unitarias se termina, el script imprime un resumen con el número total de pruebas, el número de pruebas exitosas y el número de pruebas fallidas. Además de esto, termina con un código de estado: 0 si no ha habido pruebas fallidas exitosas y 1 si ha habido alguna prueba fallida. Este código de estado es útil cuando el sistema de pruebas unitarias se usa con otras herramientas (por ejemplo, make).

Digamos que tenemos unas pruebas que generan la siguiente salida:

PASS: first_test PASS: second_test FAIL: third_test

Si filtramos esto con el script de awk, obtenemos el siguiente resultado:

PASS: first_test PASS: second_test FAIL: third_test ============================================================================ Testsuite summary ============================================================================ # TOTAL: 3 # PASS: 2 # FAIL: 1 ============================================================================


Categorías: Informática

Permalink: http://sgcg.es/articulos/2015/06/21/sistema-elemental-de-pruebas-unitarias-para-el-lenguaje-de-programacion-c-2/