php phpunit bdd behat mink

php - codeception



PHPUnit & Behat; complementarias o alternativas? (3)

He estado buscando SO y Google, pero realmente no pude obtener una respuesta definitiva.

PHPUnit es un marco para unittesting, como JUnit. Lo uso, también en combinación con la extensión Selenium para pruebas funcionales. Cuando miro alrededor, veo que Behat / Mink sigue siendo mencionado. Pero no entiendo completamente cómo encaja Behat aquí.

Con Behat usted escribe escenarios en formato legible por humanos. ¿Entonces Behat puede traducir eso en clases de esqueleto para un nuevo proyecto? ¿Pero también proporciona clases de esqueleto para pruebas de unidad? ¿Escribe unidades de prueba usando Behat, o usaría PHPUnit / SimpleTest para esas?

¿Pero entonces Behat / Mink reemplaza PHPUnit_Selenium-extension para pruebas funcionales?

¿Utiliza Behat solo para proyectos nuevos o también puede adaptarse a proyectos existentes?


Parece que todo está mal con esta respuesta.

phpunit es una prueba de unidad, y por eso se adhiere a TDD.

phpspec y behat es una prueba funcional, por lo que es BDD.

se complementan entre sí, un escenario perfecto sería un proyecto en el que tenga ambos tipos de pruebas, pero esto podría restringirse solo a los grandes proyectos que pueden permitirse hacer eso.

Prueba TDD sola o solo un par de clases. BDD prueba una característica completa a través de múltiples módulos en su aplicación.


Sí, consideraría que Behat es una alternativa a phpUnit, tanto para pruebas generales de código como para pruebas funcionales mediante la automatización del navegador.

Para las pruebas generales, phpUnit es un producto mejor establecido, mientras que Behat se centra en las pruebas escritas utilizando la metodología "BDD" (Behavior Driven Design). phpUnit también tiene características BDD, pero Behat está mucho más orientado hacia ese estilo.

Ya que estamos hablando de pruebas de navegador funcionales en lugar de pruebas de unidad, probablemente no esté pensando en algunas de las funciones de prueba de unidad más potentes que tienen; sólo quieres escribir la automatización del navegador. Para esto, realmente puedes elegir el que más te convenga.

Hay casos de borde sutiles donde cada uno de ellos tiene puntos fuertes sobre el otro, pero en la mayoría de los casos ambos son capaces de ejecutar scripts de prueba en una variedad de navegadores.

Mi preferencia sería ir a Behat / Mink, ya que es más flexible; puede admitir varios motores de automatización del navegador, incluidos Selenium y Sahi, lo que significa que si encuentra un problema con uno, puede cambiar sus pruebas al otro y continuar. Tuvimos esta situación exacta, intentando que algunos scripts de prueba de Mink funcionaran en Selenium; el cambio a Sahi lo hizo funcionar e implicó cambiar solo una línea de código de prueba.

También vale la pena agregar que Mink puede usarse solo sin Behat, si no desea escribir pruebas de estilo BDD.


Yo consideraría que Behat es complementario a PHPunit. Me refiero a complementario al usar Behat para probar el comportamiento, PHPUnit para probar el código. Usando BDD / TDD, uno primero escribiría una prueba basada en una historia de usuario. Para hacer que la prueba pase, normalmente escribiría varias pruebas PHPUnit utilizando TDD para crear la aplicación que podrá pasar la prueba BDD.

BDD debe probar el comportamiento y no conocer el código de la aplicación, como entidades / controladores / interfaces. Debería poder intercambiar la aplicación completa con otra y aún pasar todas las pruebas cuando el comportamiento de la aplicación sea el mismo.

TDD, además de otras cosas como tu mente, debe guiar tu estructura de clases e interacción entre ellas. Además de eso, prueban que sus métodos hacen lo que deben hacer, aclaran la intención y permiten refactorizar sin temor.