BDD es una "fuera de" metodología, que según tengo entendido, significa que comienza con lo que sabe. Escribes tus historias y escenarios, y luego implementas los objetos de dominio más externos, moviéndote "hacia adentro" y "deliberadamente" descubriendo colaboradores a medida que avanzas: hacia abajo a través de capas de servicio, capas de dominio, etc. Para un colaborador que aún no existe, te burlas (o "falsas") hasta que lo haces. (Estoy robando algunos de estos términos directamente de Dan North y Kent Beck).¿El BDD es realmente aplicable en la capa UI?
Entonces, ¿cómo encaja una interfaz de usuario en esto?
Tomando prestado de uno de Norte de blog entries, que vuelve a escribir esto:
Given an unauthenticated user
When the user tries to navigate to the welcome page
Then they should be redirected to the login page
When the user enters a valid name in the Name field
And the user enters the corresponding password in the Password field
And the user presses the Login button
Then they should be directed to the welcome page
en esto:
Given an unauthenticated user
When the user tries to access a restricted asset
Then they should be directed to a login page
When the user submits valid credentials
Then they should be redirected back to the restricted content
Él hace esto para eliminar el lenguaje de dominios que no son relevantes, uno de los cuales es la interfaz de usuario ("Campo de nombre", "Campo de contraseña", "Botón de inicio de sesión"). Ahora la IU puede cambiar y la historia (o más bien, la intención de la historia ) no se rompe.
Entonces, cuando escribo la implementación de esta historia, ¿uso la IU o no? ¿Es mejor iniciar un navegador y ejecutar "el usuario envía credenciales válidas" a través de una prueba de Selenium, o conectarse directamente a la implementación subyacente (como un servicio de autenticación)? Por cierto, estoy usando jBehave como mi framework BDD, pero podría ser igual de fácil que Cucumber, rSpec, o un número de otros.
Tiendo a no probar UI de manera automatizada, y soy cauteloso con las herramientas de automatización GUI como Selenium porque creo que las pruebas (1) pueden ser demasiado frágiles y (2) se ejecutan donde el costo de ejecución es la mayor. Así que mi inclinación es probar manualmente la interfaz de usuario para la estética y la usabilidad y dejar la lógica de negocios en capas más bajas y más fáciles de usar. (Y posiblemente capas menos propensas a cambiar.)
Pero estoy abierto a ser convertido en esto. Entonces, ¿BDD para UI o no?
PS. He leído todas las publicaciones de SO que pude encontrar sobre este tema, y ninguna realmente aborda mi pregunta. This one se acerca más, pero no estoy hablando de separar la interfaz de usuario en una historia separada; más bien, estoy hablando de ignorarlo por completo para los propósitos de BDD.
Gracias por la respuesta, Liz. También he estado haciendo referencia a tu blog y a tus videos. No en vano, BDD se trata de comunicación más que cualquier otra cosa, lo que, a mi juicio, subraya mi reticencia a incorporar la GUI. Mis grupos de interés generalmente no expresan historias en términos de la GUI de todos modos. –
"Tío" Bob Martin [tuiteó] (https://twitter.com/unclebobmartin/status/207282123835588608) sobre este tema dos veces durante el fin de semana, agregando leña al fuego: "¡Las pruebas son código! Como todos los códigos que necesitan ser ¡diseñado! ¡No vincules tus pruebas con la UI! " –
Aparentemente solo se permite un enlace HTML por comentario. [Aquí está] (https://twitter.com/unclebobmartin/status/207281655130488832) el segundo enlace: "Las personas que hacen BDD a través de la interfaz de usuario no están haciendo BDD en absoluto. Están haciendo MDD: Desarrollo impulsado por Mess". –