Implementering av trinn дефinisjoner
Koble Gherkin-funksjonsfiler til kjørbar kode ved å skrive trinn дефinisjoner med et BDD-rammeverk.
Implementering av trinn дефinisjoner er en gratis leksjon i Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Testing i praksis: JUnit, Mockito og integrasjonstester, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Testing i praksis: JUnit, Mockito og integrasjonstester inneholder totalt 4 leksjoner.
Step Definitions: Kodebroen
I Behavior-Driven Development (BDD) beskriver Gherkin-featurefiler atferd i et naturlig språk. Men hvordan forstår applikasjonen instruksjonene?
Det er her Step Definitions kommer inn! De er den avgjørende koblingen som oversetter hvert Gherkin-trinn (Given, When, Then) til kjørbar kode.
- De er metoder som samsvarer med Gherkin-mønstre.
- BDD-rammeverk (som Cucumber) finner og kjører disse metodene.
Eksempelet vårt: En enkel kalkulator
La oss bruke en enkel Calculator for å demonstrere hvordan step definitions fungerer. Denne klassen inneholder tilstanden og logikken som trinnene våre skal samhandle med.
Prøv å kjøre denne enkle kalkulatoren:
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());
}
}Annotasjonen @Given
Annotasjonen @Given brukes for metoder som etablerer den innledende konteksten eller forhåndsbetingelsene for et scenario. Den setter opp «verdenen» før en handling finner sted.
Vi oppretter en klasse kalt StepDefinitions som skal inneholde trinnmetodene våre. Legg merke til hvordan strengen i @Given samsvarer med et Gherkin-trinn.
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();
}
}Annotasjonen @When
Annotasjonen @When markerer metoder som beskriver en handling eller hendelse. Det er vanligvis her systemet som testes, blir samhandlet med eller utløst.
Kalkulatoren vår utfører en «add»-operasjon her.
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();
}
}Annotasjonen @Then
Annotasjonen @Then brukes for metoder som observerer resultatet av handlingen. Her hevder du at systemet oppførte seg som forventet.
Vi kontrollerer om resultatet fra kalkulatoren er riktig.
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();
}
}Sende data med argumenter
Hardkodede verdier er ikke fleksible. BDD-rammeverk lar deg hente data fra Gherkin-trinnet og sende dem som argumenter til metoden for step definition.
Vi bruker regulære uttrykk eller Cucumber Expressions (som {int}) til å definere plassholdere.
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"
}
}Fleksibel trinnsamsvar med Regex
Selv om {int} og {string} er praktiske, kan du bruke fullstendige regulære uttrykk for mer komplekse samsvarsmønstre.
Hvis Gherkin-trinnet for eksempel var Given I have an (empty|full) wallet, kan mønsteret for step definition være "^I have an (empty|full) wallet$" for å fange opp «empty» eller «full».
- Bruk
\\d+for ett eller flere sifre. - Bruk
"(.*)"for å fange opp vilkårlig tekst.
Dette gjør at én step definition kan samsvare med flere litt forskjellige Gherkin-formuleringer.
BDD Hooks: Oppsett og opprydding
Noen ganger må du utføre handlinger før eller etter hvert scenario, eller til og med før eller etter alle funksjoner. BDD-rammeverk tilbyr Hooks for dette.
@Before: Kjører før hvert scenario. Nyttig for å tilbakestille tilstanden.@After: Kjører etter hvert scenario. Nyttig for opprydding.
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();
}
}Kjøre feature-filene
I et ekte BDD-prosjekt ville du ikke kalt step definition-metoder manuelt slik vi gjorde i main.
I stedet ville du hatt en Test Runner (ofte en JUnit-testklasse) som forteller BDD-rammeverket (for eksempel Cucumber) hvor feature-filene og step definitions finnes.
Runneren analyserer deretter Gherkin, finner samsvarende step definitions og kjører dem i riktig rekkefølge mens resultatene rapporteres.
Hurtigsjekk: Rollene til Step Definitions
Koble BDD-annotasjonen til hovedrollen den har i en step definition.
Oppsummering: Implementere Step Definitions
Du har lært hvordan menneskelesbare Gherkin-trinn kobles til kjørbar kode!
- Step Definitions er Java-metoder annotert med
@Given,@Wheneller@Then. - De bruker regulære uttrykk eller Cucumber Expressions (som
{int}) for å samsvare med Gherkin-tekst. - Argumenter kan hentes fra Gherkin-trinnet og sendes til metoden.
- Hooks som
@Beforeog@Afterbidrar til å håndtere oppsett og opprydding for scenarier.
Denne broen mellom språk og kode er grunnleggende for BDD og sikrer at testene kan forstås av alle som er involvert i prosjektet!
Lær deg Testing i praksis: JUnit, Mockito og integrasjonstester med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Implementering av trinn дефinisjoner» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Testing i praksis: JUnit, Mockito og integrasjonstester, inkludert «Implementering av trinn дефinisjoner», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Testing i praksis: JUnit, Mockito og integrasjonstester inneholder totalt 4 leksjoner.
Hva lærer jeg i «Implementering av trinn дефinisjoner»?
Koble Gherkin-funksjonsfiler til kjørbar kode ved å skrive trinn дефinisjoner med et BDD-rammeverk. Du øver på Testing i praksis: JUnit, Mockito og integrasjonstester med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Testing i praksis: JUnit, Mockito og integrasjonstester?
Ingen tidligere erfaring er nødvendig. Testing i praksis: JUnit, Mockito og integrasjonstester på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Implementering av trinn дефinisjoner»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Testing i praksis: JUnit, Mockito og integrasjonstester-leksjonen?
Ja. Alle Testing i praksis: JUnit, Mockito og integrasjonstester-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Introduksjon til BDD
- Gherkin-syntaks og funksjoner
- Implementering av trinn дефinisjoner
- Scenario outlines og datatabeller