2012-05-18 29 views
7

Estoy trabajando en un nuevo proyecto, donde quiero mostrar algunos datos en la pantalla. Me puse a usar TDD, que es nuevo para mí, pero me encanta la idea y me llevo muy bien hasta ahora.Cómo TDD un JFrame?

Configuré un JFrame, agregué un Textarea y coloqué texto allí, pero ¿cómo puedo probar esto correctamente? ¿O está pensando mal en el contexto TDD de mi lado? ¡Quiero estar seguro (de la manera TDD) de que los datos se muestran correctamente! La creación del texto que se muestra se cubre correctamente con las pruebas, pero el que muestra no lo está.

Aquí está un ejemplo simplificado por completo:

public class MyTextDisplay { 
    public static void main(String[] args) { 
     JFrame my_frame = new JFrame("DisplaySomeText"); 
     my_frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JTextArea textArea = new JTextArea(5, 20); 
     textArea.setEditable(false); 

     my_frame.add(textArea); 
     my_frame.setVisible(true); 

     //this would be in a separate method 
     textArea.append("Hello World"); 
    } 
} 
+0

¿Está seguro de que le gustaría incluir pruebas de límite ("unidad" que prueba la UI) en su ciclo de vida TDD? Soy un gran defensor de TDD, pero no incluyo pruebas de límites, solo la capa de servicio y otras partes de la capa de negocios. –

+0

Baastian, esta es una excelente primera pregunta. +1. Gracias por esforzarme. – jmort253

+0

Entonces, ¿probar la visualización y las cosas debería verse como un tema completamente diferente? Como mencioné, soy bastante nuevo en TDD ... –

Respuesta

5

TDD requiere que pensar en las cosas un poco diferente. Primero debe determinar qué va a probar y cómo lo va a probar antes de escribir realmente cualquier código para la solución.

Para las GUI, esto puede ser bastante complicado y, para ser sinceros, su GUI nunca debe contener ninguna lógica que pueda estar en una capa separada. Por ejemplo, el valor que se muestra debe provenir de un objeto que no tiene nada que ver con la GUI, pero que se puede probar de forma individual. Eso le permite desarrollar la lógica de negocios principal (modelo y controlador) separada de la pantalla (vista). Este es el patrón MVC. El desarrollo basado en pruebas simplemente significa que prueba lo que puede antes de escribir el código y, a medida que agrega más código, más pruebas comenzarán a pasar.

Prefiero centrarme en mi diseño y asegurarme de que lo que esté generando el valor del texto funcione como se espera. La GUI debe ser "tonta" y centrarse únicamente en mostrar o recuperar valores, con poca o ninguna preocupación si los valores mostrados son realmente correctos.

Como una GUI es muy difícil de probar con herramientas automatizadas (prueba adecuada), evitaría eso tanto como fuera posible y desacoplaría mi GUI de mi aplicación real tanto como pudiera. Luego puede probar la GUI una vez, para asegurarse de que muestre lo que se supone que debe hacer, y centrarse en la lógica de negocios sin tener que realizar pruebas continuas en la GUI ya que no está tocando ese código.

+0

¡Voy a separar la GUI lo más fuerte que pueda y lo dejo fuera de mi ciclo TDD por ahora! Thx –

+0

Excelente elección. Su GUI nunca debe contener una lógica que pueda interferir con el funcionamiento de su aplicación. – Ewald

Cuestiones relacionadas