Parametroidut ja dynaamiset testit
Kirjoittakaa tehokkaita testejä, jotka suoritetaan useilla tietojoukoilla parametrisoitujen testien avulla, ja luokaa testejä dynaamisesti ajon aikana.
Parametroidut ja dynaamiset testit on ilmainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Johdatus dataohjattuun testaukseen
Kuvitelkaa, että haluatte testata funktiota monilla erilaisilla syötteillä. Erillisen testin kirjoittaminen jokaiselle syötteelle voi olla työlästä ja toisteista.
Dataohjatun testauksen avulla sama testilogiikka voidaan suorittaa useita kertoja, mutta jokaisella suorituskerralla käytetään erilaista datajoukkoa. Tämä tehostaa testejä ja helpottaa niiden ylläpitoa.
Mitä parametroidut testit ovat
Parametrisoitujen testien avulla JUnit 5:ssä voidaan kirjoittaa yksi testimetodi, joka suoritetaan useita kertoja eri argumenteilla. Testikoodin kopioimisen ja liittämisen sijaan annatte tarvittavat tiedot, ja JUnit huolehtii iteraatioista.
- Säästää aikaa ja vähentää toisteista koodia.
- Parantaa testikattavuutta, koska reunatapauksia on helppo testata.
- Tekee testeistä luettavampia ja helpommin ylläpidettäviä.
@ParameterizedTest-annotaation käyttäminen
Parametrisoitu testi luodaan käyttämällä @ParameterizedTest-annotaatiota @Test-annotaation sijaan. Lisäksi argumenteille on annettava lähde.
JUnit 5 tarjoaa useita argumenttilähteitä, kuten yhden argumentin @ValueSource-annotaation ja useita argumentteja @CsvSource-annotaation avulla. Tutustutaan ensin @ValueSource-annotaatioon.
Yksinkertaiset tiedot @ValueSource-annotaatiolla
@ValueSource-annotaatio sopii erinomaisesti yksinkertaisten primitiivisten tietotyyppien antamiseen suoraan testille. Se tukee muun muassa strings-, ints-, longs- ja doubles-tyyppejä.
Jokainen lähteen arvo suorittaa testimetodin kerran kyseisen arvon ollessa argumenttina.
@ValueSource käytännössä
Tässä on yksinkertainen esimerkki, jossa testataan, etteivät merkkijonot ole null-arvoja tai tyhjiä. Huomaattehan, että testimetodi vastaanottaa String-parametrin.
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
class StringValidatorTest {
@ParameterizedTest
@ValueSource(strings = {"apple", "banana", "orange"})
void testStringsAreNotEmpty(String fruit) {
Assertions.assertNotNull(fruit);
Assertions.assertFalse(fruit.isEmpty());
}
}Useita argumentteja @CsvSource-annotaatiolla
Kun testimetodi tarvitsee useamman kuin yhden argumentin, @CsvSource on kätevä. Sen avulla argumentit voidaan määrittää pilkuilla eroteltuina arvoina (CSV).
Jokainen @CsvSource-taulukon merkkijono edustaa yhtä tietoriviä, ja arvot erotellaan pilkuilla testimetodin parametrien mukaisesti.
@CsvSource käytännössä
Testataan yksinkertaista yhteenlaskufunktiota. Jokainen @CsvSource-annotaation rivi sisältää kaksi lukua ja niiden odotetun summan.
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
class CalculatorTest {
// Simple method to simulate
int add(int a, int b) {
return a + b;
}
@ParameterizedTest
@CsvSource({"1, 1, 2", "2, 3, 5", "5, 0, 5"})
void testAddMethod(int a, int b, int expectedSum) {
Assertions.assertEquals(expectedSum, add(a, b));
}
}Dynaamisten testien luominen
Joskus testitiedot tai edes testien lukumäärä eivät ole tiedossa ennen suoritusta. Tällöin dynaamiset testit ovat hyödyllisiä!
Sen sijaan että kaikki testit määritettäisiin käännösaikana, dynaamisten testien avulla testit voidaan luoda ohjelmallisesti testien suorituksen aikana. Tämä on hyödyllistä monimutkaisissa tilanteissa tai ulkoisia tietolähteitä käytettäessä.
@TestFactory ja DynamicTest
Dynaamiset testit luodaan käyttämällä @TestFactory-annotaatiota. @TestFactory-annotaatiolla merkitty metodi ei suorita testiä itse, vaan tuottaa kokoelman DynamicTest-instansseja.
@TestFactory-metodien on palautettavaDynamicTest-alkioidenStream,Collection,IterabletaiIterator.- Jokaisella
DynamicTest-instanssilla on näyttönimi ja suoritettava lambda-lauseke.
Dynaaminen testi käytännössä
Tässä on esimerkki, jossa luodaan testit merkkijonojen pituuksille. Jokainen testi luodaan lennossa sanaluettelon perusteella.
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import java.util.Arrays;
import java.util.Collection;
class DynamicTestExample {
@TestFactory
Collection<DynamicTest> dynamicTestsFromCollection() {
return Arrays.asList(
DynamicTest.dynamicTest("Test 'apple' length",
() -> Assertions.assertEquals(5, "apple".length())),
DynamicTest.dynamicTest("Test 'banana' length",
() -> Assertions.assertEquals(6, "banana".length())),
DynamicTest.dynamicTest("Test 'cat' length",
() -> Assertions.assertEquals(3, "cat".length()))
);
}
}Parametrisoidut ja dynaamiset testit
Parametrisoidut ja dynaamiset testit vähentävät molemmat toisteista koodia, mutta niitä käytetään eri tarpeisiin.
Mikä seuraavista on parametrisoitujen testien ensisijainen hyöty verrattuna erillisten @Test-metodien kirjoittamiseen samankaltaisia testitapauksia varten?
Kertaus: joustava testaaminen
Hienoa! Olette oppineet tekemään JUnit-testeistänne joustavampia ja tehokkaampia:
- Parametrisoitujen testien (
@ParameterizedTestsekä esimerkiksi@ValueSource- ja@CsvSource-lähteet) avulla sama testilogiikka voidaan suorittaa useilla ennalta määritetyillä tietojoukoilla. - Dynaamisten testien (
@TestFactory) avulla testejä voidaan luoda ohjelmallisesti suorituksen aikana. Tämä sopii erityisesti tilanteisiin, joissa testitapaukset löydetään dynaamisesti.
Näiden ominaisuuksien avulla voitte kirjoittaa selkeämmin ja kattavammin testejä pienemmällä vaivalla!
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 ”Parametroidut ja dynaamiset testit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolun 3 oppituntia, myös oppitunnin “Parametroidut ja dynaamiset testit”. 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 ”Parametroidut ja dynaamiset testit”?
Kirjoittakaa tehokkaita testejä, jotka suoritetaan useilla tietojoukoilla parametrisoitujen testien avulla, ja luokaa testejä dynaamisesti ajon aikana. 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 2/4.
Kuinka kauan ”Parametroidut ja dynaamiset testit”-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
- Testien elinkaari ja suoritusjärjestys
- Parametroidut ja dynaamiset testit
- Poikkeustestaus ja aikakatkaisut
- Ehdolliset testit ja oletukset