TestBed 26.03
Een webforJ-weergave testen betekent meestal dat je de app start, een browser opent en deze aanstuurt met Selenium of Playwright. Daarmee vang je op wat alleen in een browser zichtbaar is, maar voor elke test betaal je de prijs van de browser, de server en het wachten tussendoor.
De TestBed is de browserloze testomgeving van webforJ. Een weergave wordt uitgevoerd in een gewone JUnit-test. Er wordt geen browser geopend en geen server gestart. De test voegt de weergave toe, werkt ermee zoals een gebruiker dat doet en controleert het resultaat vanuit Java. Componenten worden gekoppeld, activeren hun events en navigeren precies zoals in een actieve app. Elke interactie is afgerond voordat de volgende regel van de test wordt uitgevoerd, zodat er niets hoeft te wachten en niets onbetrouwbaar is.
Hoe een test werkt
Een TestBed-test volgt de stappen van een gebruiker. De test zoekt een component op de pagina, voert er een handeling op uit en controleert daarna wat de pagina toont. Met het volgende formulier kan een gebruiker zich aanmelden met een e-mailadres. De knop Subscribe blijft uitgeschakeld totdat het veld een adres bevat:
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);
}
}
De test vindt het veld en de knop, voert een adres in, klikt op de knop en controleert de bevestiging:
@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());
}
Elke stap heeft een eigen onderdeel in de TestBed:
- Vinden.
ComponentLocatorbeschrijft een component zoals een gebruiker die herkent, aan de hand van het type en wat de component toont, bijvoorbeeld een veld op basis van het label. Zie Componenten vinden. - Handelen.
UserInteractionvoert handelingen van een gebruiker uit, en alleen handelingen die een gebruiker ook kan uitvoeren. Als je op een uitgeschakelde knop klikt, mislukt de test in plaats van dat de listener wordt uitgevoerd. Zie Gebruikersinteractie. - Controleren.
verifyThatcontroleert wat een gebruiker op een component zou zien. Een snapshot vergelijkt de volledige weergave met een opgeslagen beschrijving ervan. Zie Assertions en Snapshots.
De test benadert nooit rechtstreeks de velden van de weergave. De test werkt met wat de pagina toont, zodat deze blijft slagen wanneer de weergave anders is opgebouwd, en mislukt wanneer de gebruiker iets anders zou zien.
Naast afzonderlijke weergaven kan de TestBed routes doorlopen, beveiligde weergaven testen, reageren op dialogen en timers uitvoeren, zoals beschreven in Apps testen. Ook kan de TestBed worden uitgevoerd in een Spring Boot-app met de bijbehorende beans en beveiliging.
Browsertests blijven nuttig voor wat alleen een browser kan tonen, zoals styling, indeling en gedrag aan de clientkant. De TestBed dekt de rest: wat je weergaven doen wanneer een gebruiker ermee werkt.
Begin met Aan de slag om de dependency toe te voegen en je eerste test te schrijven.
Onderwerpen
Aan de slag
Add the TestBed dependency, write a first test that adds a view and acts on it, and run the test.
Componenten vinden
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.
Gebruikersinteractie
Act on the components of a TestBed test through the same gestures a user makes, and get the same events a user causes.
Asserties
Check what the user would see on a component with verifyThat, and read failures that name the component and both values.
Momentopnamen
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.
Blijf leren
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