Blog de Gonzalo

PRUEBAS BDD CON BEHAT

Hace bastante tiempo os hablé de las pruebas TDD y de las pruebas unitarias. Hoy os quiero hablar de las pruebas bdd, behavior-driven development, en php usando behat.

¿Qué son las pruebas bdd?


Las pruebas bdd ma´s que ser pruebas son una estrategia de desarrollo. Lo que plantea es definir un lenguaje común para el negocio y para los técnicos, y utilizar eso como parte inicial del desarrollo y el testing. Por esto es que es importante que vos como tester entiendas bien qué es BDD. Es decir, expresar en lenguaje natural lo que se quiere y trasladar a código lo que se ha especificado para evitar malos entendidos entre el product owner y la parte técnica. Y una de las maneras de conseguir eso es usando behat y gherkin.
Usando esta herramienta, behat, se especifica un documento llamado loquesea.feature con los requisitos a implementar. En un proyecto puede haber varios archivos .feature para agrupar los requisitos por funcionalidad o secciones, por ejemplo. Luego habrá otro fichero llamado FeatureContext.php donde estará la implementación del código que se requiere en el fichero .feature y depsués probar que todo está bien.
Una vez que se ha instalado behat, dentro de nuestro proyecto, lanzaremos el comando ./vendor/bin/behat --init y veremos que se ha creado, dentro de nuestro proyecto, una carpeta llamada features y dentro dentro de esa carpeta otra llamada bootstrap.
Dentro de la carpeta features se crearan los ficheros con extensión .feature para especificar los requisitos, que tendrán el siguiente formato:
  • Feature: Nombre de la funcionalidad que vamos a probar, el título de la prueba.
  • Scenario: por cada prueba que se ejecutara se especifica la funcionalidad a probar.
  • Given: Este sería el contexto del escenario de prueba o las precondiciones de los datos.
  • When: Se especifican el conjunto de las acciones que se van a ejecutar en el test.
  • Then: Aquí se especifica el resultado esperado del test y/o las validaciones que deseamos realizar.

Por ejemplo creemos el fichero features/calculadora.feature

Feature: calculator
Scenario: Create a calculator
Given that I want to add to numbers
When I introduce the numbers 1 and 3
Then the result must be 4

Si después de crear el fichero features/calculadora.feature ejecutamos el comando ./vendor/bin/behat y elegimos la opción 1 nos dirá que nos falta el fichero FeatureContext.php y nos dirá los métodos que tendría que tener según lo escrito en el fichero .feature en nuestro caso calculadora.feature. Vayamos a crear el fichero features/bootstrap/FeatureContext.php


use Behat\Behat\Context\Context;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;

/**
 * Defines application features from the specific context.
 */
class FeatureContext implements Context
{

    public $num1 = 0;
    public $num2 = 0;
    public $res = 0;
    /**
     * Initializes context.
     *
     * Every scenario gets its own context instance.
     * You can also pass arbitrary arguments to the
     * context constructor through behat.yml.
     */
    public function __construct()
    {

    }
    /**
     *  @Given that I want to add to numbers
     */
    public function queQuieroSumarDosNumeros()
    {
          $this->res = $this->num1 + $this->num2;
    }

    /**
     * @When  I introduce the numbers :arg1 and :arg2
     */
    public function ingresoLosNumerosY($arg1, $arg2)
    {
        $this->num1 = $arg1;
        $this->num2 = $arg2;
    }

    /**
     * @Then the result must be :arg1
     */
    public function solicitoElResultadoDelCalculo($arg1)
    {
        $this->res = $this->num1 + $this->num2;
        if ( $this->res != $arg1) {
            throw new Exception("Error in the addition");
        }
    }
}

Vemos que cada método de la clase tiene unas anotaciones y que salvo la clase constructor coindiden con lo escrito en el fichero feature. ¡OJO! el texto de cada anotación tiene que coincidir con lo escrito en cada especificación del fichero .feature sino al ejecutar behat nos dirá que falta código.
Cuando ejecutemos ./vendor/bin/behat Si se cumplen las especificaciones del fichero .feature y si todo está bien.
El fichero .feature puede estar en español de la siguiente manera:

#language: es

Característica: Crear una calculadora

Escenario: Sumar dos números
    Cuando ingreso los números 1 y 3
    Y solicito el resultado del cálculo
    Entonces el resultado debe ser 4

Compartir en twitter