TestBed 26.03
Zum Testen einer webforJ-Ansicht startet man üblicherweise die App, öffnet einen Browser und steuert ihn mit Selenium oder Playwright. So lässt sich prüfen, was nur im Browser sichtbar ist. Dafür muss jedoch jeder Test den Browser, den Server und die Wartezeit dazwischen in Kauf nehmen.
Das TestBed ermöglicht browserloses Testen mit webforJ. Eine Ansicht läuft in einem einfachen JUnit-Test. Es wird weder ein Browser geöffnet noch ein Server gestartet. Der Test fügt die Ansicht hinzu, führt darauf Aktionen wie ein Benutzer aus und überprüft das Ergebnis in Java. Komponenten werden eingebunden, lösen ihre Ereignisse aus und navigieren genau wie in einer laufenden App. Jede Interaktion ist abgeschlossen, bevor die nächste Zeile des Tests ausgeführt wird. So gibt es keine Wartezeiten und keine instabilen Tests.
So funktioniert ein Test
Ein TestBed-Test folgt den Schritten eines Benutzers. Er findet eine Komponente auf der Seite, interagiert mit ihr und prüft anschließend, was die Seite anzeigt. Das folgende Formular abonniert eine E-Mail-Adresse. Die Schaltfläche Subscribe bleibt deaktiviert, bis das Feld eine Adresse enthält:
import com.webforj.component.Composite;
import com.webforj.component.button.Button;
import com.webforj.component.field.TextField;
import com.webforj.component.html.elements.Div;
import com.webforj.component.html.elements.Paragraph;
public class NewsletterForm extends Composite<Div> {
public NewsletterForm() {
TextField email = new TextField("Email");
Paragraph status = new Paragraph();
Button subscribe =
new Button(
"Subscribe", e -> status.setText("Subscribed " + email.getValue()));
subscribe.setEnabled(false);
email.onModify(e -> subscribe.setEnabled(!email.getValue().isBlank()));
getBoundComponent().add(email, subscribe, status);
}
}
Der Test findet das Feld und die Schaltfläche, gibt eine Adresse ein, klickt darauf und überprüft die Bestätigung:
@Test
void shouldSubscribeTheEmailTheUserTyped(WebforjTestbed context) {
context.add(new NewsletterForm());
var email = ComponentLocator.of(TextField.class).byLabel("Email").locate();
var subscribe = ComponentLocator.of(Button.class)
.byText("Subscribe")
.locate();
UserInteraction.type(email, "ada@example.com");
UserInteraction.click(subscribe);
assertTrue(
ComponentLocator.of(Paragraph.class)
.byText("Subscribed ada@example.com")
.isPresent());
}
Jeder Schritt hat seinen eigenen Teil des TestBed:
- Finden.
ComponentLocatorbeschreibt eine Komponente so, wie ein Benutzer sie auswählt: anhand ihres Typs und dessen, was sie anzeigt, zum Beispiel ein Feld anhand seiner Beschriftung. Siehe Komponenten finden. - Interagieren. Mit
UserInteractionwerden die Aktionen eines Benutzers ausgeführt – und nur solche, die ein Benutzer auch ausführen könnte. Wird auf eine deaktivierte Schaltfläche geklickt, schlägt der Test fehl, statt den Listener auszuführen. Siehe Benutzerinteraktion. - Überprüfen.
verifyThatprüft, was ein Benutzer an einer Komponente sehen würde. Ein Snapshot vergleicht die gesamte Ansicht mit einer gespeicherten Beschreibung davon. Siehe Assertions und Snapshots.
Der Test greift niemals direkt auf die Felder der Ansicht zu. Er arbeitet mit dem, was die Seite anzeigt. Dadurch bleibt er erfolgreich, wenn die Ansicht anders aufgebaut ist, und schlägt fehl, wenn der Benutzer etwas anderes sehen würde.
Das TestBed kann über einzelne Ansichten hinaus Routen aufrufen, geschützte Ansichten testen, Dialoge beantworten und Timer ausführen, wie unter Apps testen beschrieben. Außerdem kann es innerhalb einer Spring-Boot-App mit deren Beans und Sicherheitsmechanismen ausgeführt werden.
Browser-Tests sind weiterhin wichtig, wenn es um Dinge geht, die nur ein Browser zeigen kann, etwa Styling, Layout und Verhalten auf der Clientseite. Das TestBed deckt den Rest ab: das Verhalten deiner Ansichten bei der Interaktion mit einem Benutzer.
Unter Erste Schritte erfährst du, wie du die Abhängigkeit hinzufügst und deinen ersten Test schreibst.
Themen
Erste Schritte
Add the TestBed dependency, write a first test that adds a view and acts on it, and run the test.
Komponenten finden
Describe the components a TestBed test acts on the way a user picks them out on the page, by type, text, label and what they contain.
Benutzerinteraktion
Act on the components of a TestBed test through the same gestures a user makes, and get the same events a user causes.
Zusicherungen
Check what the user would see on a component with verifyThat, and read failures that name the component and both values.
Momentaufnahmen
Compare everything a view shows with a stored text description of it, read that description, and add the state of your own components to it.
Apps testen
Start a TestBed test with the routes or the whole app, navigate, test secured routes, answer dialogs, control timers, and answer for the browser.
Weiterlernen
ArtikelClaude Code Java Web App: Build the Whole Thing, Screens Included
ArtikelThe AI coding agent verification loop for Java
ArtikelJava web app testing strategy: what to test, and where
ArtikelAI coding in Java: quality control for generated code
ArtikelAI Java web framework: how webforJ is built for AI work
ArtikelJava UI testing without a browser: the webforJ TestBed guide