Siempre que realicé un proyecto con herramientas de estilo XUnit, tengo dificultades para encontrar mi cabeza en el lugar correcto. Encuentro que el uso de herramientas diseñadas para el desarrollo impulsado por comportamiento o "Specification by example" me facilita do TDD right, es decir, me concentro en el diseño, en la exposición de intenciones y describing behaviour in specific contexts. No pruebas.
Dicho esto, me gustaría introducir pecs en la conversación. Del archivo léame en el sitio del proyecto.
pecs es una pequeña biblioteca de desarrollo basada en el comportamiento para PHP 5.3, a la RSpec o JSpec.
Si usó JSpec o mejor aún, Jasmine-BDD (para JavaScript), el estilo pecs de describir el comportamiento debería ser muy familiar. Este estilo me parece genial para las especificaciones de nivel de componentes. Si está buscando una herramienta PHP para las especificaciones de nivel de función (historias o pruebas de aceptación del usuario), considere Behat.
Volviendo a los pectorales, he aquí un ejemplo entresacado del sitio del proyecto pectorales:
describe("Bowling", function() {
it("should score 0 for a gutter game", function() {
$bowling = new Bowling();
for ($i=0; $i < 20; $i++) {
$bowling->hit(0);
}
expect($bowling->score)->to_equal(0);
});
});
Sí que es una especificación de PHP. Mirando a través de la fuente pecs, parece que el autor puede sacar provecho al aprovechar el nuevo hotness en PHP 5.3+, Lambdas y cierres. Así que supongo que esto significa que no puede usar pecs en ningún proyecto basado en PHP < 5.3 (solo FYI).
Además, pecs no es tan maduro como PHPUnit o SimpleTest. Sin embargo, creo que los defensores de BDD en la comunidad de PHP deberían apoyar el crecimiento de herramientas como pecs que fomentan "Especificación por ejemplo" o BDD sin la confusión provocada por el uso de herramientas de prueba de XUnit heredadas.
Actualmente trabajo más en Python que en PHP. Sin embargo, la próxima vez que elija un proyecto de PHP, estaré muy contento si tengo una herramienta madura y compatible con la comunidad como pecs para diseñar las especificaciones del software.
He utilizado selenio y estoy de acuerdo en que es útil en varios casos, sin embargo, también se empantana muy rápidamente, especialmente en un proyecto de tipo de navegador muy "líquido". Por ejemplo, cambiar la ID de una casilla, mover la URL o incluso la estructura DOM alrededor puede romper una gran cantidad de pruebas. Lo que es * bueno * sobre el selenio es que en muchos casos puedes grabar la prueba manualmente a través del Selenium IDE - exportarlo como PHPUnit - luego ajustar de acuerdo a tus necesidades para agregar looping y variabilidad. Es bastante robusto en ese sentido. (De hecho, puedes exportarlo a varios idiomas diferentes) –