Palautusarvojen stubbaaminen
Määrittäkää mock-oliot palauttamaan tiettyjä arvoja tai heittämään poikkeuksia, kun niiden metodeja kutsutaan.
Palautusarvojen stubbaaminen on ilmainen Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppitunti CoddyKitissä. Tämä on oppitunti 1/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 mockien stubbaamiseen
Kun luotte mock-objektin, sillä ei ole todellista toimintaa. Sen metodit eivät oletusarvoisesti tee mitään, vaan palauttavat usein arvon null, 0 tai tyhjiä kokoelmia.
Stubbaus tarkoittaa mock-objektin opettamista vastaamaan tiettyihin metodikutsuihin. Se on kuin antaisitte mockille noudatettavan käsikirjoituksen!
Näin voitte hallita testienne täsmällisiä olosuhteita ja eristää varsinaisesti testattavan koodin.
Mockien määrittäminen palauttamaan arvoja
Yleisin tapa stubata mock on käyttää rakennetta when().thenReturn(). Se kertoo Mockitolle: "Kun tätä tiettyä metodia kutsutaan mock-oliolla, palauta tämä ennalta määritetty arvo."
when(mock.someMethod()).thenReturn(value);
value voi olla mikä tahansa metodin paluutyyppiä vastaava olio tai primitiivityyppi.
thenReturn()-koodiesimerkki
Kokeilkaa suorittaa tämä yksinkertainen esimerkki. Huomatkaa, että mockin add-metodi palauttaa stubatun arvomme vain, kun sitä kutsutaan arvoilla (1, 1).
import static org.mockito.Mockito.*;
interface CalculatorService {
int add(int a, int b);
}
public class Main {
public static void main(String[] args) {
// Create a mock of CalculatorService
CalculatorService mockCalc = mock(CalculatorService.class);
// Stub the add(1, 1) method to return 5
when(mockCalc.add(1, 1)).thenReturn(5);
// Call the stubbed method
System.out.println("1 + 1 = " + mockCalc.add(1, 1));
// Call a method that was NOT stubbed
System.out.println("2 + 2 = " + mockCalc.add(2, 2));
}
}Mockit virheiden heittäjinä
Joskus on testattava, kuinka koodi käsittelee virheitä. Voitte määrittää mockin heittämään poikkeuksen, kun tiettyä metodia kutsutaan, käyttämällä rakennetta when().thenThrow().
when(mock.failingMethod()).thenThrow(new SomeException("Error!"));
Tämä on olennaista virhepolkujen testaamisessa ja sen varmistamisessa, että sovellus käsittelee odottamattomat tilanteet hallitusti.
thenThrow()-koodiesimerkki
Tässä esimerkissä DataService-mock määritetään heittämään IllegalArgumentException, jos tietoja yritetään hakea tunnisteella "invalid".
import static org.mockito.Mockito.*;
interface DataService {
String fetchData(String id);
}
public class Main {
public static void main(String[] args) {
DataService mockData = mock(DataService.class);
// Stub fetchData("invalid") to throw an exception
when(mockData.fetchData("invalid"))
.thenThrow(new IllegalArgumentException("ID not found!"));
// Call a method that was NOT stubbed (returns null by default)
System.out.println("Fetching 'valid': " + mockData.fetchData("valid"));
// Call the stubbed method that throws an exception
try {
System.out.println("Fetching 'invalid': " + mockData.fetchData("invalid"));
} catch (IllegalArgumentException e) {
System.out.println("Caught error: " + e.getMessage());
}
}
}Dynaamiset vastaukset: thenAnswer()
Mitä jos mockin vastauksen on riiputtava sille välitetyistä argumenteista tai sen on suoritettava mukautettua logiikkaa?
when().thenAnswer() ratkaisee tämän. Se ottaa Answer-olion, joka on usein lambda tai anonyymi luokka ja tarjoaa enemmän hallintaa:
- Saatte käyttöönne todellisen metodikutsun argumentit.
- Voitte suorittaa laskutoimituksia tai monimutkaista logiikkaa.
- Voitte palauttaa arvon tai heittää poikkeuksen dynaamisesti.
thenAnswer()-koodiesimerkki
Tässä mockin multiply-metodi suorittaa itse asiassa kertolaskun saamiensa argumenttien perusteella. Tämä on dynaamisempaa kuin kiinteä paluuarvo.
import static org.mockito.Mockito.*;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
interface MathService {
int multiply(int a, int b);
}
public class Main {
public static void main(String[] args) {
MathService mockMath = mock(MathService.class);
// Stub multiply for any two integers to perform actual multiplication
when(mockMath.multiply(anyInt(), anyInt())).thenAnswer(
new Answer<Integer>() {
public Integer answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Integer arg1 = (Integer) args[0];
Integer arg2 = (Integer) args[1];
return arg1 * arg2; // Custom logic based on arguments
}
}
);
System.out.println("3 * 4 = " + mockMath.multiply(3, 4));
System.out.println("5 * 2 = " + mockMath.multiply(5, 2));
System.out.println("7 * 0 = " + mockMath.multiply(7, 0));
}
}Useita paluuarvoja: ketjuttaminen
Mitä jos haluatte mock-metodin palauttavan eri arvoja peräkkäisillä kutsuilla?
Mockito mahdollistaa stubbausmetodien ketjuttamisen. Voitte antaa useita paluuarvoja metodille thenReturn() tai ketjuttaa useita thenReturn()-, thenThrow()- tai thenAnswer()-kutsuja.
when(mock.method()).thenReturn(val1, val2, val3);when(mock.method()).thenReturn(val1).thenThrow(ex).thenReturn(val3);
Kun kaikki määritetyt arvot tai toiminnot on käytetty, viimeistä niistä toistetaan seuraavilla kutsuilla.
Ketjutetun stubbaamisen esimerkki
Tarkkailkaa, kuinka Queue-mockimme palauttaa ensin arvon "Item A", sitten arvon "Item B" ja heittää sen jälkeen poikkeuksen seuraavilla poll()-kutsuilla.
import static org.mockito.Mockito.*;
import java.util.Queue;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Queue<String> mockQueue = mock(Queue.class);
// Stub poll() to return different values/actions on successive calls
when(mockQueue.poll())
.thenReturn("Item A")
.thenReturn("Item B")
.thenThrow(new IllegalStateException("Queue is empty!"));
System.out.println("Poll 1: " + mockQueue.poll()); // Returns "Item A"
System.out.println("Poll 2: " + mockQueue.poll()); // Returns "Item B"
try {
System.out.println("Poll 3: " + mockQueue.poll()); // Throws exception
} catch (IllegalStateException e) {
System.out.println("Caught error on Poll 3: " + e.getMessage());
}
// Subsequent calls will repeat the last action (throw exception)
try {
System.out.println("Poll 4: " + mockQueue.poll());
} catch (IllegalStateException e) {
System.out.println("Caught error on Poll 4: " + e.getMessage());
}
}
}Testaa ymmärryksesi
Testaatte metodia, joka käsittelee jonosta haettuja alkioita. Jonon poll()-metodin on palautettava ensin "Task 1", sitten "Task 2" ja lopuksi seuraavilla kutsuilla null (mikä ilmaisee tyhjän jonon). Mitä Mockito-stubbaustapaa käyttäisitte?
Paluuarvojen stubbaus: kertaus
Tässä oppitunnissa opitte hallitsemaan mock-objektien toimintaa stubbaamalla niiden metodikutsuja. Tämä on olennaista testattavan yksikön eristämisessä ja ennakoitavien testiympäristöjen luomisessa.
when().thenReturn(): Saa mock-metodin palauttamaan tietyn arvon.when().thenThrow(): Saa mock-metodin heittämään poikkeuksen.when().thenAnswer(): Dynaamiset vastaukset metodin argumenttien tai mukautetun logiikan perusteella.- Ketjuttaminen: Määrittää peräkkäisille saman metodin kutsuille erilaisia toimintoja.
Seuraavaksi tutustumme Mockiton argumenttien täsmäyttäjiin, joiden avulla stubbaamisesta ja verifioinnista tulee vielä joustavampaa!
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 ”Palautusarvojen stubbaaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Testauksen hallinta: JUnit, Mockito ja integraatiotestit-oppimispolun 3 oppituntia, myös oppitunnin “Palautusarvojen stubbaaminen”. 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 ”Palautusarvojen stubbaaminen”?
Määrittäkää mock-oliot palauttamaan tiettyjä arvoja tai heittämään poikkeuksia, kun niiden metodeja kutsutaan. 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 1/4.
Kuinka kauan ”Palautusarvojen stubbaaminen”-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
- Palautusarvojen stubbaaminen
- Mockiton argumenttitäsmääjät
- Oikeiden olioiden vakoilu
- Poikkeusten heittäminen ja peräkkäiset kutsut