Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

11. Probando tu app

Lo que vas a aprender: crear una red de seguridad con pruebas que se ejecutan en el runtime gráfico. Prerrequisitos: Haciéndolo responsivo.

Ejemplo completo (copiar, pegar y ejecutar)

A diferencia de los otros capítulos, aquí el ejemplo autosuficiente es un TestCase completo (no una MainWindow): abre la pantalla en load(), simula toques en runTests() y compara el screenshot con el golden. DeviceConfig.isTesting = true hace la renderización determinista. Compila tal cual.

package com.exemplo;

import dev.crossfly.test.*;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

public class AdicionarTarefaTest extends TestCase
{
   @Override
   protected void load() throws Exception
   {
      DeviceConfig.isTesting = true;                 // prerrequisito del golden (determinismo)
      new TarefasScreen().show();
   }

   @Override
   public void runTests() throws Exception
   {
      waitWindow(TarefasScreen.class);               // espera un frame estable
      type(0, TextField.class, "Comprar pão");       // escribe en el 1er TextField
      click("Adicionar");                            // hace clic en el botón por el texto
      shot();                                        // captura y compara con el golden
   }

   @Override
   protected void unload() { }
}

class TarefasScreen extends Window                   // la pantalla bajo prueba
{
   private final TextField campo = new TextField().caption("Nova tarefa");
   private final Component listaBox = new Component();

   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());
      add(LAY_AUTO, campo);

      Button add = new Button("Adicionar");
      add.onAction(c -> {
         String t = campo.getText().trim();
         if (!t.isEmpty()) { listaBox.add(LAY_AUTO, new Label(t)); campo.clearText(); listaBox.setValidLayout(false); repaint(); }
      });
      add(LAY_AUTO, add);

      listaBox.setLayout(new VerticalLayout());
      add(LAY_FILL, listaBox);
   }
}

Para ejecutar la suite:

new TestSuite().startTests(new TestCase[]{ new AdicionarTarefaTest() });

Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de onShow()). Para ejecutar, colócalos en el esqueleto MainWindow de arriba.

Las pruebas se ejecutan en el runtime gráfico (no es JUnit)

Cada TestCase corre dentro del paint thread/pipeline GL; la aserción principal es la comparación visual de screenshots (golden images).

public class AdicionarTarefaTest extends TestCase {
   @Override protected void load() throws Exception { new TarefasScreen().show(); }
   @Override public void runTests() throws Exception {
      waitWindow(TarefasScreen.class);
      type(0, TextField.class, "Comprar pão");   // escribe en el campo
      click("Adicionar");                         // hace clic en el botón
      shot();                                     // captura y compara con el golden
   }
   @Override protected void unload() { }
}

Ejecutar con una TestSuite:

new TestSuite().startTests(new TestCase[]{ new AdicionarTarefaTest() });

⚠️ Determinismo: DeviceConfig.isTesting

La comparación píxel a píxel solo coincide si la renderización es determinista. Activa DeviceConfig.isTesting = true (fija el cursor, elimina timestamps) — sin esto, el golden nunca coincide. Usa waitWindow(...)/waitAnimation() antes de shot() para capturar un frame estable.

Screenshot directo

Image atual = Main.getScreenShot(true);   // captura el frame (opaco) para comparar con el baseline

Construyes en este paso

Pruebas para agregar/persistir tarea y una prueba visual de una pantalla.

Recapitulando

TestCase (load/runTests/unload) + click/type/shot; DeviceConfig.isTesting es prerrequisito del golden; captura frames estables.

Próximos pasos

→ Publicando

Ver también

¿Te resultó útil esta página?