Primeros pasos con Tester
Incluso los buenos programadores cometen errores. La diferencia entre un buen programador y uno malo es que el bueno lo hará una sola vez y la próxima vez lo detectará usando pruebas automatizadas.
- “Quien no prueba está condenado a repetir sus propios errores”. (sabio proverbio)
- “Cuando nos libramos de un error, aparece otro”. (Ley de Murphy)
- “Siempre que tengas la tentación de imprimir una declaración, escríbela en su lugar como una prueba”. (Martin Fowler)
¿Has escrito alguna vez el siguiente código en PHP?
$obj = new MyClass;
$result = $obj->process($input);
var_dump($result);
¿Has volcado alguna vez el resultado de la llamada a una función sólo para comprobar a ojo que devuelve lo que debe devolver? Seguro que lo haces muchas veces al día. Con la mano en el corazón, si todo funciona, ¿borras este código y esperas que la clase no se rompa en el futuro? La Ley de Murphy garantiza lo contrario :-)
De hecho, tú escribiste la prueba. Necesita una ligera modificación para no requerir nuestra inspección, simplemente para poder comprobarse a sí mismo. Y si no lo borraste podríamos ejecutarlo en cualquier momento en el futuro para verificar que todo sigue funcionando como debería. Es posible que crees una gran cantidad de estas pruebas a lo largo del tiempo, por lo que estaría bien que pudiéramos ejecutarlas automáticamente.
Y Nette Tester ayuda precisamente con eso.
¿Qué hace que Tester sea único?
Escribir pruebas para Nette Tester es único en el sentido de que cada prueba es un script PHP estándar que puede ejecutarse de forma autónoma.
Así que cuando usted escribe una prueba, puede simplemente ejecutarla para ver si hay un error de programación. Si funciona correctamente. Si no, puedes recorrer fácilmente el programa en tu IDE y buscar un error. Incluso puedes abrirlo en un navegador.
Y lo más importante – ejecutándolo, realizarás la prueba. Usted sabrá inmediatamente si pasó o falló. ¿Cómo? Vamos
a mostrar aquí. Vamos a escribir una prueba trivial para el uso de PHP matriz y guardarlo en el archivo
ArrayTest.php
:
<?php
use Tester\Assert;
require __DIR__ . '/vendor/autoload.php'; # cargar Composer autoloader
Tester\Environment::setup(); # inicialización de Nette Tester
$stack = [];
Assert::same(0, count($stack)); # esperamos que count() devuelva cero
$stack[] = 'foo';
Assert::same(1, count($stack)); # esperamos que count() devuelva uno
Assert::contains('foo', $stack); # verifica que $stack contiene el elemento 'foo'
Como puedes ver, los métodos de aserción como
Assert::same()
se utilizan para afirmar que un valor real coincide con un valor esperado.
La prueba está escrita, podemos ejecutarla desde la línea de comandos. La primera ejecución revelará cualquier error de sintaxis, y si no cometió un error tipográfico, verá:
$ php ArrayTest.php
OK
Prueba a cambiar la sentencia a Assert::contains('XXX', $stack);
en la prueba y observa lo que ocurre al
ejecutarla:
$ php ArrayTest.php Failed: ['foo'] should contain 'XXX' in ArrayTest.php(17) Assert::contains('XXX', $stack); FAILURE
Continuamos sobre la escritura en el capítulo Escribiendo Pruebas.
Instalación y requisitos
La versión mínima de PHP requerida por Tester es la 7.1 (para más detalles, consulte la tabla de versiones de PHP soportadas ). La forma preferida de instalación es por Composer:
composer require --dev nette/tester
Intente ejecutar Nette Tester desde la línea de comandos (sin argumentos sólo mostrará un resumen de ayuda):
vendor/bin/tester
Ejecutar pruebas
A medida que nuestra aplicación crece, el número de pruebas crece con ella. No sería práctico ejecutar las pruebas una a una. Por ello, el Comprobador dispone de un ejecutor de pruebas masivo, que invocamos desde la línea de comandos. El parámetro es el directorio en el que se encuentran las pruebas. El punto indica el directorio actual.
vendor/bin/tester .
El ejecutor de Nette Tester busca en el directorio especificado y en todos los subdirectorios y busca las pruebas, que son los
archivos *.phpt
y *Test.php
. También encontrará nuestra prueba ArrayTest.php
, ya que
coincide con la máscara.
A continuación, inicia las pruebas. Ejecuta cada prueba como un nuevo proceso PHP, por lo que se ejecuta completamente aislado de los demás. Se ejecuta en paralelo en múltiples hilos, por lo que es extremadamente rápido. Y primero ejecuta las pruebas que fallaron durante la ejecución anterior, por lo que sabrá de inmediato si solucionó el error.
Por cada prueba realizada, el ejecutor imprime un carácter para indicar el progreso:
.
– prueba superadas
– prueba omitidaF
– prueba fallida
La salida puede tener este aspecto:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ v2.5.2 Note: No php.ini is used. PHP 8.3.2 (cli) | php -n | 8 threads ........s................F......... -- FAILED: greeting.phpt Failed: 'Hello John' should be ... 'Hello Peter' in greeting.phpt(19) Assert::same('Hello Peter', $o->say('John')); FAILURES! (35 tests, 1 failures, 1 skipped, 1.7 seconds)
Se ejecutaron 35 pruebas, una falló, una se omitió.
Continuamos en el capítulo Ejecución de pruebas.
Modo vigilancia
¿Está refactorizando el código? ¿O incluso desarrollas según la metodología TDD (Test Driven Development)? Entonces te gustará el modo vigilancia. El Probador monitoriza los códigos fuente y se ejecuta a sí mismo cuando se producen cambios.
Durante el desarrollo, tienes un terminal en la esquina del monitor, donde se te ilumina la barra de estado verde, y cuando de repente se vuelve roja, sabes que acabas de hacer algo no deseado. En realidad es un gran juego en el que programas e intentas ceñirte al color.
El modo Watch se inicia usando el parámetro –watch.
Informes de CodeCoverage
El Comprobador puede generar informes con una visión general de cuánto código fuente cubren las pruebas. El informe puede estar en formato HTML legible por humanos o en Clover XML para su posterior procesamiento automático.
Vea el ejemplo de informe HTML con cobertura de código.
Versiones de PHP soportadas
versión | compatible con PHP |
---|---|
Tester 2.5 | PHP 8.0 – 8.3 |
Tester 2.3 | PHP 7.1 – 8.0 |
Tester 2.1 – 2.2 | PHP 7.1 – 7.3 |
Tester 2.0 | PHP 5.6 – 7.3 |
Tester 1.7 | PHP 5.3 – 7.3 + HHVM 3.3+ |
Tester 1.6 | PHP 5.3 – 7.0 + HHVM |
Tester 1.3 – 1.5 | PHP 5.3 – 5.6 + HHVM |
Tester 0.9 – 1.2 | PHP 5.3 – 5.6 |
Se aplica a las últimas versiones de parches.
Hasta la versión 1.7 Tester soportaba HHVM 3.3.0 o superior (usando
tester -p hhvm
). El soporte ha sido eliminado desde Tester 2.0. El uso era simple: