test español ejemplo driven development atdd unit-testing tdd functional-testing

unit-testing - ejemplo - test driven development español



Test Driven Development(TDD) para interfaz de usuario(UI) con pruebas funcionales (7)

ATDD es muy útil si tiene un buen conocimiento de cómo debe comportarse la interfaz de usuario y también asegura que el costo del cambio en las pruebas funcionales que usted construye por adelantado sea menor.

El mayor problema al hacer esto, por supuesto, es que la mayoría de las veces la interfaz de usuario no está completamente especificada.

Por ejemplo, si está creando un producto y todavía está haciendo iteraciones rápidas para obtener una UI que pasa por una prueba de usabilidad y la retroalimentación incorporada, no desea el bagaje de corregir sus pruebas funcionales con cada pequeño cambio en la UI.

Dado que las pruebas funcionales son generalmente lentas, el ciclo de retroalimentación es alto y es muy doloroso mantenerlas verdes con los cambios en la IU.

Trabajo en un equipo de productos donde tuvimos la misma decisión que tomar. Un colega mío ha resumido muy bien nuestro enfoque final here . (Descargo de responsabilidad: por favor ignore los detalles específicos de la herramienta allí).

Como sabemos, TDD significa "escribir primero la prueba y luego escribir el código". Y cuando se trata de pruebas de unidad, esto está bien, porque estás limitado dentro de la "unidad".

Sin embargo, cuando se trata de UI, escribir pruebas funcionales de antemano tiene menos sentido (para mí). Esto se debe a que las pruebas funcionales tienen que verificar un conjunto (posiblemente largo) de requisitos funcionales. Por lo general, esto puede abarcar múltiples pantallas (páginas), condiciones previas como "inicio de sesión", "haber insertado recientemente un registro", etc.

Según Wikipedia:

El desarrollo guiado por pruebas es difícil de usar en situaciones donde se requieren pruebas funcionales completas para determinar el éxito o el fracaso. Algunos ejemplos son las interfaces de usuario, los programas que funcionan con bases de datos y algunos que dependen de configuraciones de red específicas.

(Por supuesto, Wikipedia no es una "autoridad", pero esto suena muy lógico).

Entonces, cualquier pensamiento, o mejor, experiencia, con pruebas funcionales, primero para la interfaz de usuario y luego el código. ¿Funciona? ¿Y es "dolor"?


He hecho la aceptación TDD con una interfaz de usuario. Afirmaríamos que el encabezado común y el pie de página se usaron a través de xpath''ing para los identificadores apropiados. También utilizamos xpath para afirmar que los datos aparecieron en la etiqueta correcta en relación con los identificadores que utilizamos para el diseño y la estructura básicos. También afirmamos que la página de salida es válida html 4.01 estricta.


Intente combinar BDD con TDD.

  • BDD define los escenarios como la interacción con gui (aún no implementado)
  • mientras que hay un "paso BDD no implementado" (gris o rojo)
    • Convertir algunos BDD-Step no implementados del escenario actual en código en ejecución
    • Implementar este paso usando tdd

Para obtener más detalles, vea el artículo de MSDN Desarrollo guiado por el comportamiento con SpecFlow y WatiN . A pesar de que el artículo es sobre asp.net, la idea detrás es universal.


La clave para probar una interfaz de usuario es separar sus preocupaciones : el comportamiento de su interfaz de usuario es realmente diferente al aspecto de su interfaz de usuario. Luchamos con esto mentalmente, por lo que como ejercicio tomemos un juego como Tetris e imaginemos portarlo de una plataforma (digamos PC) a otra (la web). La intuición es que todo es diferente, ¡hay que reescribirlo todo! Pero en realidad todo esto es lo mismo.

  • Las reglas del juego.
  • La velocidad de los bloques cayendo.
  • La lógica para la coincidencia de filas
  • Que bloque se elige
  • Y más...

Tienes la idea Lo único que cambia es cómo se dibuja la pantalla. Separa cómo se ve tu interfaz de usuario de cómo funciona. Esto es complicado, y por lo general no puede ser perfecto, pero está cerca. Mi recomendación es escribir la última interfaz de usuario. Las pruebas proporcionarán la retroalimentación si su comportamiento está funcionando, y la pantalla indicará si se ve bien. Esta combinación proporciona la retroalimentación rápida que estamos buscando de TDD sin una interfaz de usuario.


Las pruebas programáticas de UI son una salvación cuando usted quiere estar seguro de que su UI hace lo que esperaba. Las pruebas de UI están más cerca de BDD (desarrollo impulsado por el comportamiento) que de TDD. ¡Pero la terminología está nublada y como las llames son útiles! Tengo bastante buena experiencia con el pepino . Lo uso para probar aplicaciones flexibles, pero se usa principalmente para probar aplicaciones web. Haga clic en el enlace! El sitio tiene muy buenos ejemplos de metodología.


Prueba BDD, desarrollo conducido por el comportamiento . Promueve la escritura de historias de especificación que luego se ejecutan paso a paso, estimulando la aplicación para cambiar su estado y verificar los resultados.

Yo uso los escenarios BDD para escribir el código UI. Las solicitudes de negocios se describen utilizando historias de BDD y luego se escribe la funcionalidad para que las historias se vuelvan verdes.


TDD para las pruebas funcionales tiene sentido para mí. Escriba una prueba funcional, véala fallar, luego divida el problema en partes, escriba una prueba unitaria para cada parte, escriba un código para cada parte, vea cómo pasan las pruebas unitarias y luego debe pasar su prueba funcional.

Aquí hay un flujo de trabajo sugerido en el libro Test-Driven Development with Python por Harry Percival (disponible en línea de forma gratuita):

PS Puede automatizar sus pruebas funcionales utilizando, por ejemplo, Selenium. Puede agregarlos al ciclo de integración continua, así como a las pruebas unitarias.