Testauksen hallinta: JUnit, Mockito ja integraatiotestit · Oppitunti

Vaihemäärittelyjen toteuttaminen

Yhdistäkää Gherkin-ominaisuustiedostot suoritettavaan koodiin kirjoittamalla vaihemäärittelyjä BDD-kehystä käyttäen.

Oppitunti 3/411 vaihetta

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 @Before ja @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!

Aloita maksutta

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

  1. Johdatus BDD:hen
  2. Gherkin-syntaksi ja ominaisuudet
  3. Vaihemäärittelyjen toteuttaminen
  4. Skenaarioiden hahmotelmat ja datataulukot
← Takaisin: Testauksen hallinta: JUnit, Mockito ja integraatiotestit