JBehave
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.