Cucumber en Java
Cucumber es una herramienta software utilizada para la ejecución de pruebas automáticas escritas siguiendo los principios del desarrollo guiado por el comportamiento (BDD). El enfoque central de Cucumber es su analizador en lenguaje natural llamado Gherkin. Gracias a él se pueden especificar los comportamientos esperados en un lenguaje fácil de comprender por los clientes.Cucumber fue escrito originalmente en Ruby, pero es compatible con una variedad de lenguajes de programación diferentes a través de varias implementaciones, incluida Java.
El lenguaje Gerkin
Gherkin es un lenguaje que define la estructura y una sintaxis básica para la descripción de las pruebas que pueden ser entendidas tanto por los integrantes técnicos del equipo como así también por los representantes del área de negocio. De esta manera mientras se generan pruebas se está generando documentación viva que describe perfectamente cómo se comporta el sistema enriqueciendo y manteniendo la documentación. Así, entre las ventajas que nos proporciona usar validaciones escritas en Gherkin estarían:- Fáciles de leer
- Fáciles de entender
- Fáciles de Parsear
- Fáciles de discutir
- Feature (Caracteristica): Indica el nombre de la funcionalidad que vamos a probar. Debe ser un título claro y explícito. Incluímos aquí una descripción en forma de historia de usuario: “Como [rol ] quiero [ característica ] para que [los beneficios]”. Sobre esta descripción empezaremos a construir nuestros escenarios de prueba.
- Scenario (Escenario): Describe cada escenario que vamos a probar.
- Background (Antecedentes): permite definir precondiciones para cada uno de los escenarios a correr y así no ser repetitivos y focalizar los escenarios en la prueba específica.
- Given (|Dado|Dada|Dados|Dadas): Provee contexto para el escenario en que se va a ejecutar el test, tales como punto donde se ejecuta el test, o prerequisitos en los datos. Incluye los pasos necesarios para poner al sistema en el estado que se desea probar.
- When (Cuando): Especifica el conjunto de acciones que lanzan el test. La interacción del usuario que acciona la funcionalidad que deseamos testear.
- Then (Entonces): Específica el resultado esperado en el test. Observamos los cambios en el sistema y vemos si son los deseados.
- But (Pero) o And (Y): Añade condiciones adicionales a los tres anteriores (Given, When o Then).
Característica: Servir café El café no se debe servir hasta que se pague El café no se debe servir hasta que se haya pulsado el botón Si no queda café entonces el dinero debe ser devuelto Antecedentes: Dado que estoy frente a la maquina de café Y tengo 1$ para depositar Escenario: Comprar último café Dado que hay 1 café que quedan en la máquina Y he depositado 1 $ Cuando presiono el botón de café Entonces 1 café debería ser servidoTambién es posible definir un esquema de escenario (Scenario Outline). Con ello se agrupa un escenario parametrizado, y un conjunto de valores.
Esquema del escenario: Comprar último café Dado que hay <CafeRestante> café que quedan en la máquina Y he depositado <MontoADepositar> $ Cuando presiono el botón de café Entonces <CantidadDeCafeARecibir>café debería ser servido Ejemplos: |CafeRestante|MontoADepositar|CantidadDeCafeARecibir| | 1 | 1 | 1 | | 99 | 99 | 99 |De esa forma, en el ejemplo anterior se está indicando dos escenarios, uno con 1 café y 1$, y otro con 99 cafés y 99$.
JUnit y Cucumber
Ejecutar un conjunto de pruebas es trivial:import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class) @CucumberOptions() public class TestRunner { }En Cucumber options se indica el directorio con los ficheros de características escritos con Gherkin, y poco más.
Las clases de Cucumber se encargaran de buscar métodos anotados con @When, @Given, @Then… y traducirá automáticamente los escenarios de Gherkin en llamadas a esos métodos. Esos métodos anotados son llamados Steps o Pasos.
package CucumberJava; import cucumber.annotation.en.Given; import cucumber.annotation.en.Then; import cucumber.annotation.en.When; public class cucumberJava { int cantidad_cafe; int cantidad_dinero; int cafe_esperado; @Given("^que hay (\\d+) café que quedan en la máquina$") public void cafe_en_la_maquina(int cafe) { cantidad_cafe = cafe; } @Given("^ he depositado ( \\d+) \\$") public void dinero_depositado(int dinero) { cantidad_dinerio = dinero; } @When("^presiono el botón de café$") public void presiono_el_boton_de_cafe() { cafe_esperado = Math.min(cantidad_cafe, cantidad_dinero); } @Then("^(\\d+) café debería ser servido$") public void cafe_servido(int cafe) { Assert.equals(cafe, cafe_esperado); } }
Comentarios
Publicar un comentario