Vaihemäärittelyjen toteuttaminen
Yhdistäkää Gherkin-ominaisuustiedostot suoritettavaan koodiin kirjoittamalla vaihemäärittelyjä BDD-kehystä käyttäen.
Vaihemäärittelyjen toteuttaminen on ilmainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Testauksen hallinta: JUnit, Mockito ja integraatiotestit-kurssilla on yhteensä 4 oppituntia.
Step Definitions: koodisilta
Käyttäytymislähtöisessä kehityksessä (BDD) Gherkin-feature-tiedostot kuvaavat käyttäytymistä luonnollisella kielellä. Mutta miten sovellus ymmärtää nämä ohjeet?
Tässä Step Definitions eli vaiheiden määrittelyt astuvat kuvaan! Ne ovat keskeinen linkki, joka muuntaa jokaisen Gherkin-vaiheen (Given, When, Then) suoritettavaksi koodiksi.
- Ne ovat metodeja, jotka vastaavat Gherkin-kuvioita.
- BDD-kehykset, kuten Cucumber, etsivät nämä metodit ja suorittavat ne.
Esimerkkimme: yksinkertainen laskin
Käytetään yksinkertaista Calculator-laskinta havainnollistamaan vaiheiden määrittelyjen toimintaa. Tämä luokka sisältää tilan ja logiikan, joiden kanssa vaiheemme toimivat.
Kokeilkaa suorittaa tämä yksinkertainen laskin:
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());
}
}@Given-annotaatio
@Given-annotaatiota käytetään metodeissa, jotka määrittävät skenaarion alkukontekstin tai esiehdot. Se määrittää ”maailman” ennen toiminnon suorittamista.
Luomme StepDefinitions-luokan vaihemetodeja varten. Huomaatte, kuinka @Given-annotaation merkkijono vastaa Gherkin-vaihetta.
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();
}
}@When-annotaatio
@When-annotaatio merkitsee metodit, jotka kuvaavat toimintoa tai tapahtumaa. Tässä yleensä käytetään testattavaa järjestelmää tai käynnistetään se.
Laskimemme suorittaa tässä ”add”-toiminnon.
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();
}
}@Then-annotaatio
@Then-annotaatiota käytetään metodeissa, jotka tarkkailevat toiminnon lopputulosta. Tässä varmistetaan, että järjestelmä toimi odotetulla tavalla.
Tarkistamme, onko laskimen tulos oikea.
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();
}
}Tietojen välittäminen argumenteilla
Arvojen kirjoittaminen suoraan koodiin ei ole joustavaa. BDD-kehysten avulla Gherkin-vaiheesta voidaan poimia tietoja ja välittää ne vaiheiden määrittelymetodin argumenteiksi.
Paikkamerkkien määrittelyyn käytetään säännöllisiä lausekkeita tai Cucumber Expressions -lausekkeita (kuten {int}).
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"
}
}Joustava vaiheiden täsmäytys Regexillä
Vaikka {int} ja {string} ovat käteviä, monimutkaisempia täsmäytyskuvioita varten voi käyttää kokonaisia säännöllisiä lausekkeita.
Jos Gherkin-vaiheenne olisi esimerkiksi Given I have an (empty|full) wallet, vaiheiden määrittelyn kuvio voisi olla "^I have an (empty|full) wallet$", jolloin sillä voidaan tunnistaa ”empty” tai ”full”.
- Käyttäkää
\\d+-kuviota yhdelle tai useammalle numerolle. - Käyttäkää
"(.*)"-kuviota minkä tahansa tekstin poimimiseen.
Näin yksi vaiheiden määrittely voi vastata useita hieman erilaisia Gherkin-lauseita.
BDD-hookit: valmistelu ja siivous
Joskus ennen jokaista skenaariota tai niiden jälkeen, tai jopa kaikkien feature-tiedostojen edellä tai jälkeen, on suoritettava toimintoja. BDD-kehykset tarjoavat tähän Hook-koukkuja.
@Before: suoritetaan ennen jokaista skenaariota. Hyödyllinen tilan palauttamiseen.@After: suoritetaan jokaisen skenaarion jälkeen. Sopii siivoustoimiin.
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();
}
}Feature-tiedostojen suorittaminen
Oikeassa BDD-projektissa vaiheiden määrittelymetodeja ei kutsuttaisi manuaalisesti main-metodin tapaan.
Sen sijaan käytössä olisi Test Runner eli testiajoittaja (usein JUnit-testiluokka), joka kertoo BDD-kehykselle, kuten Cucumberille, mistä feature-tiedostot ja vaiheiden määrittelyt löytyvät.
Ajoittaja jäsentää Gherkinin, etsii vastaavat vaiheiden määrittelyt, suorittaa ne järjestyksessä ja raportoi tulokset.
Pikatarkistus: vaiheiden määrittelyjen roolit
Yhdistäkää BDD-annotaatio sen ensisijaiseen rooliin vaiheiden määrittelyssä.
Kertaus: vaiheiden määrittelyjen toteuttaminen
Olette oppineet yhdistämään ihmisille luettavat Gherkin-vaiheet suoritettavaan koodiin!
- Step Definitions ovat Java-metodeja, jotka on varustettu
@Given-,@When- tai@Then-annotaatiolla. - Ne käyttävät säännöllisiä lausekkeita tai Cucumber Expressions -lausekkeita (kuten
{int}) Gherkin-tekstin täsmäyttämiseen. - Argumentteja voidaan poimia Gherkin-vaiheesta ja välittää metodille.
- Hook-koukut, kuten
@Beforeja@After, auttavat hallitsemaan skenaarion valmistelua ja siivousta.
Tämä kielen ja koodin välinen silta on BDD:n perusta, sillä se varmistaa, että testit ovat ymmärrettäviä kaikille projektiin osallistuville!
Opi Testauksen hallinta: JUnit, Mockito ja integraatiotestit tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 12
- Oppitunnit
- 48
Usein kysytyt kysymykset
Onko oppitunti ”Vaihemäärittelyjen toteuttaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolun 3 oppituntia, myös oppitunnin “Vaihemäärittelyjen toteuttaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Testauksen hallinta: JUnit, Mockito ja integraatiotestit-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Vaihemäärittelyjen toteuttaminen”?
Yhdistäkää Gherkin-ominaisuustiedostot suoritettavaan koodiin kirjoittamalla vaihemäärittelyjä BDD-kehystä käyttäen. Harjoittelet Testauksen hallinta: JUnit, Mockito ja integraatiotestit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Testauksen hallinta: JUnit, Mockito ja integraatiotestit-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Vaihemäärittelyjen toteuttaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunnilla?
Kyllä. Jokainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Johdatus BDD:hen
- Gherkin-syntaksi ja ominaisuudet
- Vaihemäärittelyjen toteuttaminen
- Skenaarioiden hahmotelmat ja datataulukot