Diferencia entre revisiones de «JBehave»
(→Los escenarios) |
|||
(No se muestran 6 ediciones intermedias de 3 usuarios) | |||
Línea 1: | Línea 1: | ||
− | JBehave es un framework [[Java]] para mejorar la colaboración entre desarrolladores, QA, analistas de negocio, [[Dueño Del Producto]] y todos los miembros del | + | JBehave es un framework [[Java]] para mejorar la colaboración entre desarrolladores, QA, analistas de negocio, [[Dueño Del Producto]] y todos los miembros del equipo a través de escenarios automatizados y legibles. |
== Características == | == Características == | ||
− | * | + | * Escenarios escritos en texto plano |
* Posibilidad de crear múltiples escenarios en un único archivo | * Posibilidad de crear múltiples escenarios en un único archivo | ||
* Escenarios pendientes | * Escenarios pendientes | ||
Línea 22: | Línea 22: | ||
When [Evento que ocurre] | When [Evento que ocurre] | ||
Then [Salida esperada] | Then [Salida esperada] | ||
+ | |||
+ | ==Ejemplo== | ||
+ | Vamos a probar un escenario de login. Las clases que intervienen en esto serán: | ||
+ | * '''LoginService''': la clase de negocio bajo prueba | ||
+ | * '''login_exitoso''': un archivo de texto que contiene el escenario | ||
+ | * '''LoginExitoso''': una clase Java que representará al escenario | ||
+ | * '''LoginSteps''': una clase Java que contendrá la lógica de la prueba | ||
+ | |||
+ | === LoginService.java === | ||
+ | Esta será la clase de negocio que probaremos. Tiene un único método ''login'' el cual recibe un usuario y una clave. Si la clave es igual al usuario en mayúsculas devuelve true, sino false. | ||
+ | |||
+ | <code java> | ||
+ | package com.dosideas.business; | ||
+ | |||
+ | public class LoginService { | ||
+ | |||
+ | public boolean login(String user, String pass) { | ||
+ | if (user.toUpperCase().equals(pass)) { | ||
+ | return true; | ||
+ | } else { | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === login_exitoso === | ||
+ | Este es el archivo de texto con el escenario. Aquí podremos ir agregando los diferentes escenarios que querramos validar. | ||
+ | Given No estoy logueado | ||
+ | When me logueo como usuario Zim y clave ZIM | ||
+ | Then el login tiene que devolver true | ||
+ | |||
+ | === LoginExitoso.java === | ||
+ | Esta clase extiende a ''org.jbehave.scenario.Scenario'' y se encarga de representar al escenario a utilizar. Lo único que hace es cargar la implementación a usar para realizar las pruebas, en este caso ''LoginSteps''. | ||
+ | |||
+ | Esta clase tiene que estar junto al archivo de texto ''login_exitoso''. | ||
+ | |||
+ | Esta clase es un test de [[JUnit]], y será la que ejecutaremos para realizar las pruebas. | ||
+ | |||
+ | <code java> | ||
+ | package com.dosideas.jbehave; | ||
+ | |||
+ | import org.jbehave.scenario.Scenario; | ||
+ | |||
+ | public class LoginExitoso extends Scenario { | ||
+ | |||
+ | public LoginExitoso() { | ||
+ | super(new LoginSteps()); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === LoginSteps.java === | ||
+ | Esta clase contiene la lógica de las pruebas, y es quien realmente asocia los mensajes de los escenarios a código para ejecutar. En esta clase, a través de las anotaciones, se convierte parte del texto en parámetros. | ||
+ | |||
+ | <code java> | ||
+ | package com.dosideas.jbehave; | ||
+ | |||
+ | import static org.jbehave.Ensure.ensureThat; | ||
+ | import com.dosideas.business.LoginService; | ||
+ | import org.jbehave.scenario.annotations.Given; | ||
+ | import org.jbehave.scenario.annotations.Then; | ||
+ | import org.jbehave.scenario.annotations.When; | ||
+ | import org.jbehave.scenario.steps.Steps; | ||
+ | |||
+ | public class LoginSteps extends Steps { | ||
+ | |||
+ | private boolean login; | ||
+ | |||
+ | @Given("No estoy logueado") | ||
+ | public void logout() { | ||
+ | login = false; | ||
+ | } | ||
+ | |||
+ | @When("me logueo como usuario $usuario y clave $pass") | ||
+ | public void login(String usuario, String pass) { | ||
+ | LoginService loginService = new LoginService(); | ||
+ | login = loginService.login(usuario, pass); | ||
+ | } | ||
+ | |||
+ | @Then("el login tiene que devolver $loginEsperado") | ||
+ | public void comprobarLogin(String loginEsperado) { | ||
+ | ensureThat(login == Boolean.valueOf(loginEsperado)); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | === Ejecutamos... === | ||
+ | La ejecución es como un test [[JUnit]] más, ya que la clase ''LoginExitoso'' es un test JUnit. | ||
== Ver también == | == Ver también == | ||
+ | * [[Herramientas Para Pruebas De Aceptacion]] | ||
* [http://jbehave.org Web oficial de JBehave] | * [http://jbehave.org Web oficial de JBehave] | ||
+ | |||
+ | [[Category:Java]] | ||
+ | [[Category:BDD]] |
Revisión actual del 14:29 31 ago 2009
JBehave es un framework Java para mejorar la colaboración entre desarrolladores, QA, analistas de negocio, Dueño Del Producto y todos los miembros del equipo a través de escenarios automatizados y legibles.
Contenido
Características
- Escenarios escritos en texto plano
- Posibilidad de crear múltiples escenarios en un único archivo
- Escenarios pendientes
- Resultados claros y fáciles de leer
- Captura de parámetros de los escenarios
- Conversión de parámetros a objetos propios
- Soporte para múltiples lenguajes y términos de escenarios
- Altamente configurable
- Soporte para Maven
Los escenarios
La forma de escribir escenarios de JBehave es similar a una Historia De Usuario. En general, una Historia De Usuario suele escribirse como:
Como [Rol] Quiero [Caracteristica] De manera que reciba [Valor]
Los escenarios en JBehave se escriben de la siguiente forma:
Given [Contexto] When [Evento que ocurre] Then [Salida esperada]
Ejemplo
Vamos a probar un escenario de login. Las clases que intervienen en esto serán:
- LoginService: la clase de negocio bajo prueba
- login_exitoso: un archivo de texto que contiene el escenario
- LoginExitoso: una clase Java que representará al escenario
- LoginSteps: una clase Java que contendrá la lógica de la prueba
LoginService.java
Esta será la clase de negocio que probaremos. Tiene un único método login el cual recibe un usuario y una clave. Si la clave es igual al usuario en mayúsculas devuelve true, sino false.
package com.dosideas.business;
public class LoginService {
public boolean login(String user, String pass) { if (user.toUpperCase().equals(pass)) { return true; } else { return false; } }
}
login_exitoso
Este es el archivo de texto con el escenario. Aquí podremos ir agregando los diferentes escenarios que querramos validar.
Given No estoy logueado When me logueo como usuario Zim y clave ZIM Then el login tiene que devolver true
LoginExitoso.java
Esta clase extiende a org.jbehave.scenario.Scenario y se encarga de representar al escenario a utilizar. Lo único que hace es cargar la implementación a usar para realizar las pruebas, en este caso LoginSteps.
Esta clase tiene que estar junto al archivo de texto login_exitoso.
Esta clase es un test de JUnit, y será la que ejecutaremos para realizar las pruebas.
package com.dosideas.jbehave;
import org.jbehave.scenario.Scenario;
public class LoginExitoso extends Scenario {
public LoginExitoso() { super(new LoginSteps()); }
}
LoginSteps.java
Esta clase contiene la lógica de las pruebas, y es quien realmente asocia los mensajes de los escenarios a código para ejecutar. En esta clase, a través de las anotaciones, se convierte parte del texto en parámetros.
package com.dosideas.jbehave;
import static org.jbehave.Ensure.ensureThat; import com.dosideas.business.LoginService; import org.jbehave.scenario.annotations.Given; import org.jbehave.scenario.annotations.Then; import org.jbehave.scenario.annotations.When; import org.jbehave.scenario.steps.Steps;
public class LoginSteps extends Steps {
private boolean login;
@Given("No estoy logueado") public void logout() { login = false; }
@When("me logueo como usuario $usuario y clave $pass") public void login(String usuario, String pass) { LoginService loginService = new LoginService(); login = loginService.login(usuario, pass); }
@Then("el login tiene que devolver $loginEsperado") public void comprobarLogin(String loginEsperado) { ensureThat(login == Boolean.valueOf(loginEsperado)); }
}
Ejecutamos...
La ejecución es como un test JUnit más, ya que la clase LoginExitoso es un test JUnit.