Creando pruebas BDD en Flutter

Roger Sanchez
NicaSource
Published in
4 min readNov 10, 2022

Para este nuevo post estaremos hablando un poco acerca de las pruebas BDD (Behavior Driven Developer ) un lenguaje que nos permitirá describir el comportamiento de la aplicación a desarrollar. BDD es una estrategia de desarrollo que fomenta el trabajo entre el desarrollador y el usuario final del proyecto, por lo cual las pruebas se enfocan en el cumplimiento de la capa de negocio.

Para representar los requerimientos de las pruebas BDD haremos uso de Gherkins, este es un Lenguaje Específico de Dominio (DSL) que permitirá definir los criterios de aceptación.

En este post veremos el funcionamiento de BDD en Flutter con un sencillo ejemplo.

Así que, mano a la obra

Antes de ir al código, abordaremos un poco más de información acerca de Gherkins. Cada lenguaje tiene su palabras reservadas y Gherkins no es la excepción, este lenguaje trabaja bajo el patrón “Given, When,Then ”, a continuación explicaremos el funcionamiento de esta palabra con ejemplo un ejemplo:

Feature: Acceder al sistema

# El primer ejemplo tiene tres pasos

Scenario: El usuario se inicia sesión en el sistema

Give: El usuario está en la pantalla principal

When: El usuario escribe la credenciales correctamente

Then: El usuario accede al funcionamiento de la aplicación

Las palabras clave especifican los siguiente:

Feature: Título de la prueba a realizar .

Scenario: Descripción del escenario a realizar.

Given: Información del estado Inicial.

When: Acción a realizar.

Then: Resultado esperado.

Ahora crearemos un nuevo proyecto en flutter y luego nos iremos al pub.yaml para instalar la siguiente librería que nos ayudará a implementar BDD en nuestro proyecto.

Esta sería la estructura que estaremos usando, como ejemplo haremos uso del proyecto que nos ofrece Flutter al iniciar una nueva aplicación.

En el archivo app.dart dentro de la carpeta test_driver definiremos la pantalla a la que realizaremos pruebas, en este caso importamos la clase MyApp(), el código se vería de la siguiente manera:

EnableFlutterDriverExtension();

Esta línea permitirá ejecutar la aplicación.

Ahora pasaremos a definir los escenarios que realizaremos pruebas, para el ejemplo crearemos un escenario relacionado al incremento de un contador, para esto iremos a la carpeta feature dentro de test_driver y crearemos un archivo con el nombre increment_counter.feature, el código sería el siguiente:

Para que esta prueba muestre una interacción con la pantalla, deberemos colocar un Key a cada unos de los widget de los que haremos uso, para este ejemplo estamos haciendo uso de estos widgets:

Procederemos a explicar cada uno de los pasos detallados en el escenario en el archivo increment_counter.feature.

Paso 1: Given I expect the “counter” to be “0"

Este paso comprobará que “counter”esté en el key de un widget y que este refleje el valor de cero, una vez definido el paso pasaremos a la implementación de este, pero en esta ocasión no será necesario porque ya está incorporado en la librería de flutter_gherkin.

Paso 2: When I tap the “Increment” button 10 times.

El siguiente paso decimos que se pulsara 10 veces el botón y una vez esta acción termine el widget Text deberá de mostrar el valor de 10 en pantalla.

Ahora pasaremos explicar la implementación de este paso, iremos a la carpeta test_driver y crearemos un archivo dentro del directorio de step que pondremos por nombre increment_button_step.dart, este contendrá la siguiente información:

como puedes ver el método tapButtonStep() implementa a when2 que especifica 3 tipos de parámetros a recibir, el primer parámetro “key” representaría al widget que estamos utilizando, el segundo “count” la veces que se realizará el evento click y el tercero “context” que permite el acceso a la instancia del controlador de Flutter.

final locator = find.byValueKey(key)

nos permitirá comprobar si este widget se encuentra en pantalla.

await FlutterDriverUtils.tap(context.world.driver, locator);

Este paso realizará la acción de clic al widget que anteriormente habíamos declarado, ejecutándose así 10 veces.

‘I tap the {string} button {int} times’.

El texto que pasamos a when2 debe asegurarse de que sea exactamente como está escrita en el archivo increment_counter.feature, en caso contrario al ejecutar esta prueba nos mostraría un mensaje de error.

Paso 3

La definición del tercer paso no será necesario implementarlo ya que está incorporado en la librería.

Ya nos acercaremos al final de este pequeño post, pero la pregunta es cómo haremos para conectar la implementación de estos pasos con nuestra pantalla??. En este caso iremos al archivo app_test en la carpeta test_driven y escribimos los siguiente:

En este archivo definiremos los escenario y cada uno de los pasos, la opción de features permitirá acceder a todos los escenario que tengamos en nuestra carpeta features y spetDefinitions permitirá declarar todos los pasos que se realizaran las pruebas.

Una vez agregado este código, solo nos quedará ejecutar la prueba, en consola se mostrará los siguiente:

Hemos llegado al final de este post, espero que este post haya sido de tu agrado, cualquier duda o sugerencia deja tu comentario.

--

--