Testauksen hallinta: JUnit, Mockito ja integraatiotestit · Oppitunti

Poikkeustestaus ja aikakatkaisut

Varmistakaa odotetut poikkeukset ja toteuttakaa aikakatkaisut äärettömien silmukoiden tai pitkään suoritettavien testitapausten estämiseksi.

Oppitunti 3/411 vaihetta

Poikkeustestaus ja aikakatkaisut 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.

Odotettujen virheiden testaaminen

Joskus koodinne on suunniteltu heittämään virhe tietyissä virheellisissä tilanteissa, kuten nollalla jaettaessa. Poikkeusten testaamisella varmistetaan, että koodi käsittelee nämä tilanteet oikein.

  • Se tarkistaa sekä onnistumis- että epäonnistumispolut.
  • Se varmistaa, että virheilmoitukset ovat oikein.

Poikkeusten käsittely JUnitilla

JUnit 5 tarjoaa assertThrows-metodin, jolla voidaan varmistaa tietyn poikkeuksen heittäminen. Se on suositeltu ja selkein tapa testata odotettuja poikkeuksia.

  • Se vastaanottaa odotetun poikkeustyypin, esimerkiksi IllegalArgumentException.class.
  • Se vastaanottaa lambda-lausekkeen eli pienen koodinpätkän, jonka pitäisi aiheuttaa poikkeus.

`assertThrows` käytännössä

Tarkastellaan assertThrows-metodia yksinkertaisessa testissä. Calculator-luokan divide-metodin pitäisi heittää IllegalArgumentException, jos jakaja on nolla.

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class Calculator {
    public int divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return a / b;
    }
}

public class ExceptionTest {
    @Test
    void testDivideByZeroThrowsException() {
        Calculator calc = new Calculator();
        assertThrows(IllegalArgumentException.class, () -> {
            calc.divide(10, 0);
        });
    }
}

Poikkeuksen tietojen tarkistaminen

Usein ei riitä, että tiedetään *poikkeuksen tapahtuneen*. Poikkeuksen tiedot, kuten viesti tai muut ominaisuudet, kannattaa ehkä myös tarkistaa.

assertThrows-metodi palauttaa todellisen poikkeusolion, joten sille voidaan tehdä lisää tarkistuksia.

Poikkeusviestin tarkistaminen

Tässä tallennamme assertThrows-metodin palauttaman poikkeusolion ja tarkistamme sitten sen viestin assertEquals-metodilla. Näin poikkeustesteistä tulee erittäin täsmällisiä.

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class Calculator {
    public int divide(int a, int b) {
        if (b == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return a / b;
    }
}

public class ExceptionMessageTest {
    @Test
    void testDivideByZeroMessage() {
        Calculator calc = new Calculator();
        IllegalArgumentException thrown = assertThrows(
            IllegalArgumentException.class,
            () -> calc.divide(10, 0),
            "Expected divide() to throw, but it didn't"
        );
        assertEquals("Divisor cannot be zero", thrown.getMessage());
    }
}

Loputtomien testien estäminen aikakatkaisuilla

Joskus koodinpätkä voi juuttua ikuiseen silmukkaan tai sen suorittaminen voi kestää odottamattoman kauan. Tällöin testikokonaisuus voi jäädä roikkumaan loputtomasti.

Aikakatkaisut ovat tärkeä ominaisuus, joka epäonnistaa testin automaattisesti, jos se ylittää määritetyn keston. Näin testikokonaisuus suoritetaan tehokkaasti.

Aikakatkaisujen määrittäminen `@Timeout`-annotaatiolla

JUnit 5 käyttää @Timeout-annotaatiota testimetodien tai kokonaisten testiluokkien enimmäiskeston määrittämiseen. Määritätte enimmäisajan value-arvon ja ajan unit-yksikön.

  • Yleisiä yksiköitä ovat esimerkiksi TimeUnit.SECONDS, TimeUnit.MILLISECONDS ja TimeUnit.MINUTES.
  • Jos testi kestää määritettyä aikaa kauemmin, se epäonnistuu.

Metoditason aikakatkaisuesimerkki

Näin aikakatkaisu otetaan käyttöön yhdessä testimetodissa. Jos longRunningTask()-metodin suoritus kestää yli sekunnin, testi epäonnistuu automaattisesti.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.*;

public class TimeoutMethodTest {

    // A method that might take too long
    private void longRunningTask() throws InterruptedException {
        Thread.sleep(1500); // Simulates a task taking 1.5 seconds
    }

    @Test
    @Timeout(value = 1, unit = TimeUnit.SECONDS)
    void testTaskShouldCompleteWithinOneSecond() throws InterruptedException {
        longRunningTask(); // This will cause the test to fail due to timeout
        assertTrue(true, "Task completed (but it will timeout)");
    }
}

Luokkatason aikakatkaisut

@Timeout-annotaation voi määrittää myös luokkatasolla. Kun se sijoitetaan testiluokkaan, kaikki kyseisen luokan testimetodit perivät määritetyn aikakatkaisun.

Jos testimetodilla on lisäksi oma @Timeout-annotaationsa, metoditason aikakatkaisu ohittaa luokkatason aikakatkaisun kyseisen metodin osalta.

Testatkaa tietonne

Mikä JUnit 5:n ominaisuus sopii parhaiten varmistamaan, että testimetodi suoritetaan ennalta määritetyn aikarajan sisällä ja epäonnistuu, jos raja ylittyy?

Kertaus: poikkeukset ja aikakatkaisut

Tässä oppitunnissa opitte kirjoittamaan vankkoja testejä odotetuille virheille ja estämään hallitsemattomasti pitkittyvät testit:

  • Käytitte assertThrows-metodia varmistaaksenne, että koodinne heittää tiettyjä poikkeuksia.
  • Opitte tarkistamaan poikkeuksen tiettyjä tietoja, kuten sen viestin.
  • Käytitte @Timeout-annotaatiota testimetodien ja -luokkien aikarajojen määrittämiseen, mikä varmistaa testien tehokkaan suorittamisen.
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 ”Poikkeustestaus ja aikakatkaisut” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolun 3 oppituntia, myös oppitunnin “Poikkeustestaus ja aikakatkaisut”. 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 ”Poikkeustestaus ja aikakatkaisut”?

Varmistakaa odotetut poikkeukset ja toteuttakaa aikakatkaisut äärettömien silmukoiden tai pitkään suoritettavien testitapausten estämiseksi. 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 ”Poikkeustestaus ja aikakatkaisut”-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. Testien elinkaari ja suoritusjärjestys
  2. Parametroidut ja dynaamiset testit
  3. Poikkeustestaus ja aikakatkaisut
  4. Ehdolliset testit ja oletukset
← Takaisin: Testauksen hallinta: JUnit, Mockito ja integraatiotestit