clip_image001

BDD – No crees steps base


En esta entrada vamos a hablar de una práctica que suele suceder con las herramientas de BDD como Specflow, Cucumber, Behave, etc…. Es común que quienes venimos del testing automatizado Front End intentemos crear abstracciones en nuestro framework de pruebas de integración, generando archivos base para nuestros steps. El problema es que un framework de pruebas de integración no es lo mismo que uno de Pruebas de Interfaz de Usuario, vamos a ver porque no debemos aplicar ese patrón.

En las herramientas que utilizamos para pruebas de integración, los pasos (steps) y otras variables son globales a todo el proyecto. Esto quiere decir que más allá de como lo quieras particionar (distintas clases, distintas carpetas, etc..)  estos van a estar en un registro global del proyecto. Siempre que se vaya a ejecutar un paso, va a tratar de encontrar la única definición de ese paso en el registro global de pasos. Si hay varias definiciones para un mismo paso, se produce una excepción (“definición de paso ambigua”). Al construir el Registro de pasos, se consideran todos los pasos definidos (cada herramienta lo maneja a su manera, en el caso de Specflow, solo aquellos en clases con el decorator [Binding])

Tomemos el siguiente ejemplo: tenemos tres clases, una clase base (“A”) y dos subclases, “B” y “C” cada una tiene una definición coincidente para los pasos “foo”, “bar” y “boz” respectivamente.

(fuente: http://gasparnagy.com/)

También tenemos el siguiente escenario:

Scenario:  Este es un ejemplo
Given foo
And bar
And boz

Al ser las clases “B” y “C” subclases de “A”, se añadirá el paso “foo” en el registro dos veces, una como parte de la clase “B” y otra como parte de la clase “C”, por lo que la ejecución fallará por ser ambigua.

En el caso que se linkean todos los steps, es aun peor, porque también tomara el paso declarado en la clase “A”, agregando 3 veces el mismo step al registro de steps.

Esta bien separar las definiciones de paso en múltiples clases, pero alcanza con que simplemente sean clases separadas. Ya que como las definiciones de pasos son globales, se puede acceder a las definiciones de pasos “comunes” desde cualquier escenario.

¿Te gustaría alguna aclaración? ¿Te Parece que falta algo? Deja tu comentario!!!


Te gustó el post? Quieres contribuir para que escriba más?
Contribute with the Blog

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s