TestBed 26.03
Tester une vue webforJ signifie généralement démarrer l’application, ouvrir un navigateur et le piloter avec Selenium ou Playwright. Cela permet de détecter ce qui n’est visible que dans un navigateur, mais chaque test nécessite un navigateur, un serveur et du temps d’attente.
TestBed permet de tester webforJ sans navigateur. Une vue s’exécute dans un simple test JUnit. Aucun navigateur n’est ouvert et aucun serveur n’est démarré. Le test ajoute la vue, interagit avec elle comme le ferait un utilisateur et vérifie le résultat depuis Java. Les composants sont ajoutés, déclenchent leurs événements et naviguent exactement comme dans une application en cours d’exécution. Chaque interaction se termine avant l’exécution de la ligne suivante du test : rien n’attend et rien ne devient instable.
Fonctionnement d’un test
Un test TestBed suit les étapes d’un utilisateur. Il trouve un composant sur la page, interagit avec lui et vérifie ce que la page affiche ensuite. Le formulaire suivant permet de s’abonner avec une adresse e-mail ; son bouton Subscribe reste désactivé tant que le champ n’en contient pas :
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);
}
}
Le test trouve le champ et le bouton, saisit une adresse, clique sur le bouton et vérifie le message de confirmation :
@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());
}
Chaque étape correspond à une partie de TestBed :
- Rechercher.
ComponentLocatordécrit un composant comme le ferait un utilisateur pour le repérer, à partir de son type et de ce qu’il affiche, par exemple un champ grâce à son libellé. Consultez Recherche de composants. - Interagir.
UserInteractionreproduit les gestes d’un utilisateur, et uniquement ceux qu’un utilisateur peut effectuer. Cliquer sur un bouton désactivé fait échouer le test au lieu d’exécuter son écouteur. Consultez Interaction utilisateur. - Vérifier.
verifyThatvérifie ce que l’utilisateur verrait sur un composant, tandis qu’un instantané compare la vue entière à une description enregistrée. Consultez Assertions et Instantanés.
Le test n’accède jamais directement aux champs de la vue. Il se base sur ce que la page affiche : il continue donc de réussir lorsque la vue est construite différemment et échoue lorsque l’utilisateur verrait autre chose.
Au-delà des vues individuelles, TestBed permet de naviguer entre les routes, de tester les vues sécurisées, de répondre aux boîtes de dialogue et d’exécuter des minuteries, comme le montre Tester des applications. Il peut également s’exécuter dans une application Spring Boot avec ses beans et sa sécurité.
Les tests dans un navigateur restent utiles pour vérifier ce que seul un navigateur peut afficher, comme le style, la mise en page et le comportement côté client. TestBed couvre le reste : le comportement de vos vues lorsque l’utilisateur interagit avec elles.
Commencez par Prise en main pour ajouter la dépendance et écrire un premier test.
Sujets
Bien démarrer
Add the TestBed dependency, write a first test that adds a view and acts on it, and run the test.
Trouver des composants
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.
Interaction utilisateur
Act on the components of a TestBed test through the same gestures a user makes, and get the same events a user causes.
Assertions
Check what the user would see on a component with verifyThat, and read failures that name the component and both values.
Instantanés
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.
Tester des applications
Start a TestBed test with the routes or the whole app, navigate, test secured routes, answer dialogs, control timers, and answer for the browser.
Continuez à apprendre.
ArticleClaude Code Java Web App: Build the Whole Thing, Screens Included
ArticleThe AI coding agent verification loop for Java
ArticleJava web app testing strategy: what to test, and where
ArticleAI coding in Java: quality control for generated code
ArticleAI Java web framework: how webforJ is built for AI work
ArticleJava UI testing without a browser: the webforJ TestBed guide