Aan de slag 26.03
De TestBed is de browserloze testomgeving van webforJ: hiermee voer je views en componenten uit in gewone JUnit-tests, zonder browser of server. Op deze pagina voeg je de dependency toe, schrijf je een eerste test en voer je die uit.
De annotatie @WebforjTest stelt voor elke test van een klasse een WebforjTestbed-context in. Binnen een test zoekt ComponentLocator componenten op de pagina en voert UserInteraction acties uit zoals een gebruiker dat zou doen.
De dependency toevoegen
De TestBed wordt geleverd door een aparte module. Voeg deze met test scope toe aan je app:
<dependency>
<groupId>com.webforj</groupId>
<artifactId>webforj-testbed-junit</artifactId>
<scope>test</scope>
</dependency>
De versie is afkomstig uit de webforJ Bill of Materials (BOM), dus de dependency hoeft geen versie te declareren. Een project dat is gemaakt op basis van een archetype importeert de BOM al. De module bevat ook de JUnit Jupiter API.
Spring Boot-apps gebruiken in plaats daarvan de module webforj-spring-testbed. Zie Testen met Spring.
Een eerste test schrijven
Het volgende formulier begroet de gebruiker met de naam die deze invoert:
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 GreetingForm extends Composite<Div> {
public GreetingForm() {
TextField name = new TextField("Name");
Paragraph greeting = new Paragraph();
Button greet = new Button(
"Greet", e -> greeting.setText("Hello, " + name.getValue() + "!"));
getBoundComponent().add(name, greet, greeting);
}
}
De test voert een naam in, klikt op Greet en controleert de begroeting:
import static com.webforj.testbed.assertion.WebforjAssertions.verifyThat;
import com.webforj.automation.act.UserInteraction;
import com.webforj.automation.find.ComponentLocator;
import com.webforj.component.button.Button;
import com.webforj.component.field.TextField;
import com.webforj.component.html.elements.Paragraph;
import com.webforj.samples.views.testbed.GreetingForm;
import com.webforj.testbed.WebforjTestbed;
import com.webforj.testbed.annotation.WebforjTest;
import org.junit.jupiter.api.Test;
@WebforjTest
class GreetingFormTest {
@Test
void shouldGreetTheNameTheUserTyped(WebforjTestbed context) {
context.add(new GreetingForm());
var name = ComponentLocator.of(TextField.class).byLabel("Name").locate();
var greet = ComponentLocator.of(Button.class).byText("Greet").locate();
UserInteraction.type(name, "Ada");
UserInteraction.click(greet);
verifyThat(ComponentLocator.of(Paragraph.class).locate())
.hasText("Hello, Ada!");
}
}
De test leest als de stappen die een gebruiker uitvoert:
@WebforjTestgeeft elke testmethode eenWebforjTestbed, de context waarin de test wordt uitgevoerd.context.add()plaatst het formulier op de pagina en voert de volledige levenscyclus ervan uit, net zoals wanneer je het in een frame plaatst in een draaiende app.ComponentLocatorzoekt het veld op basis van het label en de knop op basis van de tekst. Zie Componenten zoeken.UserInteractiontypt en klikt zoals een gebruiker dat doet, zodat de listener van de knop wordt uitgevoerd. Zie Gebruikersinteractie.verifyThatcontroleert de tekst die de gebruiker zou lezen. Zie Assertions.
Wat @WebforjTest biedt
Elke test van een geannoteerde klasse wordt uitgevoerd in een eigen WebforjTestbed. De context wordt vóór elke test ingesteld en erna afgebroken. Zo begint elke test op een lege pagina en wordt er geen status overgedragen van de vorige test.
Een test kan op twee manieren toegang krijgen tot de context:
- Declareer een
WebforjTestbed-parameter voor de testmethode, zoals in de eerste test. - Roep
WebforjTestbed.getCurrent()aan, bijvoorbeeld vanuit een methode die de tests van een klasse delen.
context.add() accepteert een of meer componenten en voegt deze toe aan het rootframe van de context. Dit frame wordt geretourneerd door context.getFrame().
Tests die tussen routes navigeren in plaats van componenten toe te voegen, stellen de attributen app, routeClasses of routePackages van @WebforjTest in. Zie Apps testen.
De tests uitvoeren
TestBed-tests zijn gewone JUnit-tests. Voer ze uit met de buildtool of vanuit de IDE, net als elke andere JUnit-test:
mvn test



