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 esqueletoMainWindowde 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
Ver también
- Pruebas (best-practices) · Fuente canónica: Capítulo 31 — Pruebas