flash unit-testing actionscript automation automated-tests

Pruebas automatizadas(no UI) para componentes Flash existentes



unit-testing actionscript (3)

Construyo y mantengo un conjunto de componentes Flash que se distribuye a los editores y les permite integrarse con nuestro sistema. Actualmente, el componente no tiene UI y simplemente contiene un código compilado para consultar nuestros servidores del sistema, analizar la respuesta y modificar los parámetros enviados en la consulta. Hay una versión As2 y versiones AS3 para Flex y CS3. Nuestro flujo de trabajo típico es así:

1.) cargar el componente 2.) establecer parámetros en el componente 3.) decirle al componente que consulte nuestro sistema 4.) esperar un evento diciendo que la respuesta se ha recibido y analizado 5.) llamar a métodos en el componente para recuperar y usando datos analizados

Últimamente hemos hablado mucho acerca de la automatización de las pruebas de estos componentes, y parece que hay muchos rumores sobre marcos como AsUnit y FlexUnit. Sin embargo, nunca he sido capaz de entender cómo podría utilizar efectivamente uno de estos. Los ejemplos y tutoriales siempre escatiman en ejemplos del mundo real y en su lugar proporcionan múltiples clases y código excesivo para probar si una función de ejemplo devuelve num1 + num2.

Lo único que puedo adivinar es que estos marcos de prueba están destinados a ser implementados desde el principio, con la planificación para el conjunto de pruebas, el corredor de prueba y los casos de prueba incorporados al inicio del desarrollo.

Una prueba automatizada de nuestro componente debería asegurarse de que las propiedades estuvieran configuradas correctamente, esas propiedades se enviaron en la solicitud a nuestro sistema, la respuesta recibida fue correcta teniendo en cuenta los parámetros enviados, los datos analizados incluyen información correcta y no hay errores, malas respuestas , o se producen bucles de análisis infinitos.

mi pregunta es, ¿hay alguna forma de automatizar las pruebas de un componente Flash existente, ampliamente distribuido y establecido sin haberlo reelaborado completamente para que se ajuste a un marco de prueba? ¿O estoy malinterpretando los marcos de prueba y esto ya es posible?

ACTUALIZACIÓN : Gracias por las respuestas. Empecé a integrar mi componente con AsUnit y creo que entiendo muy bien cómo puede ayudarme. Sin embargo, AS2 AsUnit no admite casos de prueba asíncronos, y me está costando encontrar un marco de prueba de unidad AS2 que sí lo haga. La prueba asincrónica es REALMENTE importante para este proyecto. ¿Alguien tiene alguna recomendación para un marco diferente? ¡Gracias!


Estamos utilizando FlexUnit en nuestro proyecto y estoy muy contento con él. Suponiendo que su proyecto se diseñó con un grado de acoplamiento bastante flexible, no debería necesitar cambiar demasiado (en todo caso) para probar su código. Si ya está utilizando un framework MVC como Cairngorm o PureMVC , FlexUnit debería integrarse sin problemas.

Sin embargo, diré que mi experiencia con las pruebas de unidad Flash / Flex no es tan positiva como con otros lenguajes como Ruby o .NET por tres razones. El primero es que un grado tan alto de código actionscript está relacionado con la interfaz de usuario, y este tipo de código es difícil, si no imposible, de probar. Otra razón es que el corredor de prueba no se presta bien para ser conectado a un entorno de integración continua, como CruiseControl.NET o CruiseControl.rb, ya que requiere un humano para ejecutarlo y hacer clic en los botones. Por último, un gran beneficio de las pruebas unitarias suele ser que puede ejecutarlo junto con una herramienta de análisis de cobertura como NCover o rcov . Flash / Flex no se presta para este tipo de análisis sin un compilador modificado como Flexcover .


Si bien nunca tuve la oportunidad de trabajar con un probador de unidades en ActionScript, en el trabajo creamos un marco que:

  1. compiló el script (s) dentro de una aplicación de prueba, en nuestro caso con flex
  2. configurar una aplicación de temporizador (watchdog), en caso de fallo de bucle
  3. ejecutó la aplicación que, a su vez:
    • conectado a un backend PHP para obtener un caso de prueba
    • alimentado la prueba al componente
    • leer los resultados y enviarlos de vuelta
  4. el perro guardián patearía y mataría la aplicación en lo que ocurriera primero:
    • el temporizador se agotó (tiempo de espera razonable)
    • aplicación devolvió los resultados
  5. si había otras pruebas para ejecutar, vaya a 2.

Definitivamente no es elegante, pero hizo el trabajo (esto fue con scripts AS1)


Me alegra saber que fuiste con AsUnit!

AsUnit es el único marco de pruebas unitarias que le proporcionará una experiencia coherente en ActionScript 2 y ActionScript 3. No tiene ninguna dependencia de ningún marco externo, especialmente Flex, y no debería haber problemas reales con la creación de pruebas para su proyecto después del hecho.

Las últimas versiones de AsUnit tienen soporte para pruebas asincrónicas en ActionScript 2. La rama as25 se puede encontrar aquí:

http://github.com/lukebayes/asunit