SerenityBDD - Almacenar valores en memoria (pasar información entre steps)
Buenas lectores.
En algunas ocasiones nos encontramos con la necesidad de almacenar algún valor para luego ser usado en otro sitio, algunos ejemplos son:
- Pasar información entre clases
- Persistir valores
- Pasar información entre los steps
Cabe aclarar que existen muchas formas de solucionar esta necesidad, sin embargo, hoy la idea es ligarnos directamente al framework de SerenityBDD. Para esto tenemos dos formas más comunes de hacelo.
1. Usando variables globales
Primero almacenamos el valor que necesitamos en la memoria de Serenity, esto aplica para cualquier valor, es decir, variables (String, int, boolean), clases, listas etc...
Almacenar el valor:
Serenity.setSessionVariable("User Name").to("Jane");
Explicación de la sintaxis:
Serenity.setSessionVariable : Invoca la sesión para almacenar
("User Name") : Define el nombre de la asignación
Extraer el valor:
Lo unico que resta es traer el valor por medio del identificador
String currentUserName = Serenity.sessionVariableCalled("User Name");
Explicación de la sintaxis:
Serenity.sessionVariableCalled("User Name") : Trae el valor que tengamos como referencia "User Name", en este caso traera el valor Jane que le enviamos.
2. Usando el patron screenplay
Si estamos usando SerenityBDD muy probablemente estemos trabajando sobre el patron screenplay, para que nuestro código siga siendo legible y acorde a la metodología podemos implementar algunas soluciones como las siguientes:
2.1 Sin crear el stage
private String noteKey = "stickerLocation";
private String stickerImage = "sticker_a.png";
actor.remember(noteKey, locationOf(getImageData(stickerImage)));
actor.should(seeThat(
locationOf(getImageData(stickerImage)),equalTo(actor.recall(noteKey))))
2.2 Creando el stage
Agregamos la creación del stage a nuestro step y/o a nuestros hooks
@Before
public void SetTheStage(){
OnStage.setTheStage(new OnlineCast());
}
Luego ejecutamos lo mismo que en el punto 2.1
theActorInTheSpotlight().remember("","")
Y finalmente invocamos nuestro valor:
String valueRecall = theActorInTheSpotlight().recall("","");
Conclusiones
Como se puede observar es facil persistir información sobre el mismo framework sin llegar a usar otras formas como la inyección de dependecias permitiendo mantener un nivel de código no tan complejo y siguiendo con el patron de diseño.
Fuentes:
https://johnfergusonsmart.com/sharing-state-steps-serenity-bdd/
https://www.tabnine.com/code/java/classes/net.serenitybdd.screenplay.Actor
https://www.youtube.com/watch?v=CTU5ByCKqiY
Comentarios
Publicar un comentario