2011-02-05 15 views
16

Estoy tratando de mejorar mi código escribiendo pruebas unitarias para mi código ActionScript 3 para proyectos Flash en los que trabajo, pero estoy teniendo un obstáculo mental para entender cómo manejarlo en el contexto de un programa Flash. Parece que no puedo entender cómo manejar elementos como addChild y el escenario, así como todo el proceso asíncrono típico de las aplicaciones Flash (addEventListeners para esperar que se carguen cosas, etc.). ¿Es realmente diferente de cualquier otro idioma? ¿Cómo lidia un desarrollador con el entorno único de un programa Flash?Pruebas unitarias Código AS3 para Flash

Algunas aclaraciones:

  • Esto no tiene nada que ver con Flex, Flex no está involucrado en absoluto.
  • Los programas solo incluyen archivos de código AS3 y un FLA que contenga activos.

Respuesta

10

Una gran pregunta. Es un desafío elegir qué partes de un proyecto probar: una sola clase o colección de clases, o ambas.

Aunque las pruebas realizadas en las pruebas de la interfaz de usuario pueden detectar muchos errores lógicos y de eventos, la interfaz de usuario es comúnmente donde pueden ocurrir muchas cosas extrañas. Muchos errores en un proyecto de Flash pueden deberse a modos de interacción con el usuario inesperados; básicamente, un tester beta hace algo en la interfaz de usuario que nunca habría pensado hacer.

Si su proyecto es impulsado por la interacción del usuario, especialmente orientado a juegos en lugar de orientado a RIA, la planificación de una buena secuencia de pruebas es tan importante como las pruebas mismas. Por ejemplo, puedes probar la acción A, luego la acción B, sabiendo que B depende de A porque así es como lo escribiste. Un probador puede probar B antes de A, un escenario que quizás no haya esperado y otro que no se detectaría si A y B se probaron independientemente como unidades. También puede significar que desea escribir 3 o 4 pruebas: A, B, A-> B y B-> A, por lo que el número de estados puede salirse de control.

Algo a considerar es un marco de prueba como Flexunit para automatizar muchas de las tareas.

Editar: Debo señalar que FlexUnit también funciona para AS3 puro.

+1

+1 para una excelente respuesta también. Siempre me cuesta encontrar pruebas que cubran todo lo posible en una IU. Escribir pruebas para los modelos (buscar/enviar datos a un servidor o calcular puntajes en el fondo) es mucho más fácil. Flexunit tiene una curva de aprendizaje empinada. Definitivamente recomendaría buscar en hamcrest-as3, un complemento para flexunit, que tiene más sentido en el departamento de afirmación, imo. – epologee

+1

¿Tiene alguna buena sugerencia para separar la interfaz de usuario de la lógica en una aplicación Flash? Me resulta difícil hacerlo porque Flash está muy bien vinculado a la presentación visual. – gunit888

6

Me gusta abstraer la lógica de la aplicación de las cosas de la pantalla frontal. No creo que sea muy útil para probar la parte frontal/pantalla, pero puede probar la lógica interna y la funcionalidad del sistema. Es el patrón de diseño de MVC.

Por ejemplo: supongamos que tiene un juego Flash donde hay un jugador que puede atacar a los enemigos. Puede tener una clase Player, una clase Monster, y un método Player.attack(monster:Monster).

Las pruebas unitarias configurarán los valores en un Player y Monster, y llama al attack() y luego asegúrate de que los resultados sean correctos.

Su pantalla frontal, el escenario, objetos en los que se puede hacer clic, etc. y la IU también harán llamadas a estos objetos cuando sea apropiado en un entorno real.

Las pruebas unitarias se ejecutarían en un archivo .swf separado que ejecuta pruebas que importan los objetos modelo (Player, Monster y cualquier otra cosa que pueda tener), pero ignora por completo todos sus elementos visuales/de visualización. Evitaría la prueba unitaria de todo lo que implique la interacción del usuario.

+0

Supongo que mi gran problema es que tienden a agrupar la interfaz de usuario y la lógica.Por ejemplo, a menudo pongo todo el código de una clase (animación visual así como estado y lógica) en la misma clase que exporta el activo de la biblioteca. ¿Tiene algún recurso para usar MVC con ejemplos de Flash? – gunit888