Step definitions implementeren
Verbind Gherkin-featurebestanden met uitvoerbare code door step definitions te schrijven met een BDD-framework.
Step definitions implementeren is een gratis Testen beheersen: JUnit, Mockito en integratietesten-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Testen beheersen: JUnit, Mockito en integratietesten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Testen beheersen: JUnit, Mockito en integratietesten bevat in totaal 4 lessen.
Stapdefinities: de codebrug
Bij Behavior-Driven Development (BDD) beschrijven Gherkin-functiebestanden gedrag in gewone taal. Maar hoe begrijpt je toepassing deze instructies?
Daar komen Step Definitions om de hoek kijken! Ze vormen de cruciale verbinding en vertalen elke Gherkin-stap (Given, When, Then) naar uitvoerbare code.
- Het zijn methoden die overeenkomen met Gherkin-patronen.
- BDD-frameworks (zoals Cucumber) zoeken deze methoden en voeren ze uit.
Ons voorbeeld: een eenvoudige rekenmachine
Laten we een eenvoudige Calculator gebruiken om te demonstreren hoe stapdefinities werken. Deze klasse bevat de status en logica waarmee onze stappen werken.
Probeer deze eenvoudige rekenmachine uit te voeren:
public class Calculator {
private int result;
public void add(int a, int b) {
this.result = a + b;
}
public int getResult() {
return result;
}
public void clear() {
this.result = 0;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
calc.add(10, 5);
System.out.println("10 + 5 = " + calc.getResult());
}
}De annotatie @Given
De annotatie @Given wordt gebruikt voor methoden die de eerste context of vereisten vooraf voor een scenario instellen. Hiermee wordt de 'wereld' voorbereid voordat er een actie plaatsvindt.
We maken een klasse StepDefinitions om onze stapmethoden in onder te brengen. Let erop hoe de tekenreeks in @Given overeenkomt met een Gherkin-stap.
import io.cucumber.java.en.Given;
public class StepDefinitions {
private Calculator calculator;
@Given("I have a calculator")
public void iHaveACalculator() {
calculator = new Calculator();
System.out.println("Given: Calculator initialized.");
}
public static void main(String[] args) {
StepDefinitions steps = new StepDefinitions();
steps.iHaveACalculator();
}
}De annotatie @When
De annotatie @When markeert methoden die een actie of gebeurtenis beschrijven. Hier vindt doorgaans de interactie met het systeem dat wordt getest plaats, of wordt dit systeem geactiveerd.
Onze rekenmachine voert hier een bewerking voor optellen uit.
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
public class StepDefinitions {
private Calculator calculator;
@Given("I have a calculator")
public void iHaveACalculator() {
calculator = new Calculator();
System.out.println("Given: Calculator initialized.");
}
@When("I add two numbers")
public void iAddTwoNumbers() {
// For now, let's hardcode values. We'll make it dynamic soon!
calculator.add(10, 20);
System.out.println("When: Added two numbers (10, 20).");
}
public static void main(String[] args) {
StepDefinitions steps = new StepDefinitions();
steps.iHaveACalculator();
steps.iAddTwoNumbers();
}
}De annotatie @Then
De annotatie @Then is bedoeld voor methoden die de uitkomst van de actie observeren. Hier beweer je dat het systeem zich zoals verwacht heeft gedragen.
We controleren of het resultaat van de rekenmachine correct is.
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
public class StepDefinitions {
private Calculator calculator;
@Given("I have a calculator")
public void iHaveACalculator() {
calculator = new Calculator();
System.out.println("Given: Calculator initialized.");
}
@When("I add two numbers")
public void iAddTwoNumbers() {
calculator.add(10, 20);
System.out.println("When: Added two numbers (10, 20).");
}
@Then("the result should be 30")
public void theResultShouldBe30() {
if (calculator.getResult() == 30) {
System.out.println("Then: Result is 30. Test PASSED!");
} else {
System.out.println("Then: Expected 30, got " + calculator.getResult() + ". Test FAILED!");
}
}
public static void main(String[] args) {
StepDefinitions steps = new StepDefinitions();
steps.iHaveACalculator();
steps.iAddTwoNumbers();
steps.theResultShouldBe30();
}
}Gegevens doorgeven met argumenten
Waarden hardcoderen is niet flexibel. Met BDD-frameworks kun je gegevens uit de Gherkin-stap vastleggen en als argumenten doorgeven aan je methode voor de stapdefinitie.
We gebruiken reguliere expressies of Cucumber Expressions (zoals {int}) om plaatshouders te definiëren.
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
public class StepDefinitions {
private Calculator calculator;
@Given("I have a calculator")
public void iHaveACalculator() {
calculator = new Calculator();
System.out.println("Given: Calculator initialized.");
}
@When("I add {int} and {int}")
public void iAddTwoNumbers(int num1, int num2) {
calculator.add(num1, num2);
System.out.println("When: Added " + num1 + " and " + num2 + ".");
}
@Then("the result should be {int}")
public void theResultShouldBe(int expectedResult) {
if (calculator.getResult() == expectedResult) {
System.out.println("Then: Result is " + expectedResult + ". Test PASSED!");
} else {
System.out.println("Then: Expected " + expectedResult + ", got " + calculator.getResult() + ". Test FAILED!");
}
}
public static void main(String[] args) {
StepDefinitions steps = new StepDefinitions();
steps.iHaveACalculator();
steps.iAddTwoNumbers(5, 7); // Simulating Gherkin "When I add 5 and 7"
steps.theResultShouldBe(12); // Simulating Gherkin "Then the result should be 12"
}
}Flexibele stapherkenning met regex
Hoewel {int} en {string} handig zijn, kun je volledige reguliere expressies gebruiken voor complexere herkenningspatronen.
Als je Gherkin-stap bijvoorbeeld Given I have an (empty|full) wallet was, kan het patroon van je stapdefinitie "^I have an (empty|full) wallet$" zijn om 'empty' of 'full' vast te leggen.
- Gebruik
\\d+voor een of meer cijfers. - Gebruik
"(.*)"om willekeurige tekst vast te leggen.
Zo kan één stapdefinitie overeenkomen met verschillende, licht afwijkende Gherkin-zinnen.
BDD-hooks: instellen en opruimen
Soms moet je acties uitvoeren vóór of na elk scenario, of zelfs vóór of na alle functies. BDD-frameworks bieden hiervoor Hooks.
@Before: wordt vóór elk scenario uitgevoerd. Handig om de status opnieuw in te stellen.@After: wordt na elk scenario uitgevoerd. Goed voor het opruimen.
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import io.cucumber.java.Before;
import io.cucumber.java.After;
public class StepDefinitions {
private Calculator calculator;
@Before
public void setupScenario() {
System.out.println("\n--- Scenario Setup (@Before) ---");
calculator = new Calculator(); // Ensure a fresh calculator for each scenario
}
@After
public void teardownScenario() {
System.out.println("--- Scenario Teardown (@After) ---");
// Optional: add cleanup if needed, e.g., closing resources
}
@Given("I have a calculator")
public void iHaveACalculator() {
System.out.println("Given: Calculator initialized.");
}
@When("I add {int} and {int}")
public void iAddTwoNumbers(int num1, int num2) {
calculator.add(num1, num2);
System.out.println("When: Added " + num1 + " and " + num2 + ".");
}
@Then("the result should be {int}")
public void theResultShouldBe(int expectedResult) {
if (calculator.getResult() == expectedResult) {
System.out.println("Then: Result is " + expectedResult + ". Test PASSED!");
} else {
System.out.println("Then: Expected " + expectedResult + ", got " + calculator.getResult() + ". Test FAILED!");
}
}
public static void main(String[] args) {
StepDefinitions steps = new StepDefinitions();
// Simulate a scenario run
steps.setupScenario();
steps.iHaveACalculator();
steps.iAddTwoNumbers(8, 4); // Simulating Gherkin "When I add 8 and 4"
steps.theResultShouldBe(12); // Simulating Gherkin "Then the result should be 12"
steps.teardownScenario();
// Simulate another scenario run
steps.setupScenario();
steps.iHaveACalculator();
steps.iAddTwoNumbers(10, 0); // Simulating Gherkin "When I add 10 and 0"
steps.theResultShouldBe(10); // Simulating Gherkin "Then the result should be 10"
steps.teardownScenario();
}
}Je functiebestanden uitvoeren
In een echt BDD-project zou je niet handmatig methoden voor stapdefinities aanroepen zoals we in main hebben gedaan.
In plaats daarvan gebruik je een testrunner (vaak een JUnit-testklasse) die het BDD-framework (bijvoorbeeld Cucumber) vertelt waar het je functiebestanden en stapdefinities kan vinden.
De testrunner verwerkt vervolgens de Gherkin, zoekt overeenkomende stapdefinities en voert ze in de juiste volgorde uit, waarbij de resultaten worden gerapporteerd.
Snelle controle: rollen van stapdefinities
Koppel de BDD-annotatie aan de belangrijkste rol ervan in een stapdefinitie.
Samenvatting: stapdefinities implementeren
Je hebt geleerd hoe je voor mensen leesbare Gherkin-stappen koppelt aan uitvoerbare code!
- Step Definitions zijn Java-methoden met de annotatie
@Given,@Whenof@Then. - Ze gebruiken reguliere expressies of Cucumber Expressions (zoals
{int}) om Gherkin-tekst te herkennen. - Argumenten kunnen uit de Gherkin-stap worden vastgelegd en aan de methode worden doorgegeven.
- Hooks zoals
@Beforeen@Afterhelpen bij het beheren van het instellen en opruimen van scenario's.
Deze verbinding tussen taal en code is fundamenteel voor BDD en zorgt ervoor dat tests begrijpelijk zijn voor iedereen die bij het project betrokken is!
Leer Testen beheersen: JUnit, Mockito en integratietesten met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Step definitions implementeren” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Testen beheersen: JUnit, Mockito en integratietesten, waaronder “Step definitions implementeren”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Testen beheersen: JUnit, Mockito en integratietesten bevat in totaal 4 lessen.
Wat leer ik in “Step definitions implementeren”?
Verbind Gherkin-featurebestanden met uitvoerbare code door step definitions te schrijven met een BDD-framework. Je oefent met Testen beheersen: JUnit, Mockito en integratietesten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Testen beheersen: JUnit, Mockito en integratietesten te beginnen?
Ervaring vooraf is niet nodig. Testen beheersen: JUnit, Mockito en integratietesten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Step definitions implementeren”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Testen beheersen: JUnit, Mockito en integratietesten?
Ja. Elke les over Testen beheersen: JUnit, Mockito en integratietesten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Inleiding tot BDD
- Gherkin-syntaxis en features
- Step definitions implementeren
- Scenario Outlines en datatabellen