Riippuvuuksien mallintaminen PHPUnitilla
Luokaa mock-olioita yksiköiden eristämiseen ja yhteistyökumppanien toiminnan hallintaan.
Riippuvuuksien mallintaminen PHPUnitilla on ilmainen PHP Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu PHP Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. PHP Academy-kurssilla on yhteensä 4 oppituntia.
Miksi mockeja käytetään?
Mockaus korvaa todellisen riippuvuuden, kuten tietokannan, sähköpostipalvelun tai HTTP-asiakkaan, hallittavalla feikillä, jotta testit ovat nopeita, eristettyjä ja deterministisiä.
createMock()
createMock(ClassName::class) luo mock-olion, joka toteuttaa kaikki luokan metodit ja palauttaa oletusarvoisesti null-arvon.
<?php
$mailer = $this->createMock(Mailer::class);
// All methods return null by defaultMetodikutsujen odottaminen
Käyttäkää expects()-metodia yhdessä matchereiden, kuten once(), exactly(3), never() ja any(), kanssa varmistaaksenne, että metodeja kutsutaan oikea määrä kertoja.
<?php
$mailer->expects($this->once())
->method("send")
->with("user@example.com", "Welcome!");Palautusarvojen määrittäminen
Käyttäkää willReturn()-metodia määrittääksenne mock-metodin palauttamaan tietyn arvon.
<?php
$repo = $this->createMock(UserRepository::class);
$repo->method("find")
->willReturn(new User(id: 1, name: "Alice"));willReturnMap()
Palauttakaa argumentista riippuvia eri arvoja käyttämällä willReturnMap()-metodia.
<?php
$cache->method("get")
->willReturnMap([
["key:1", "value-one"],
["key:2", "value-two"],
]);willThrowException()
Määrittäkää mock heittämään poikkeus virheenkäsittelypolkujen testaamista varten.
<?php
$repo->method("find")
->willThrowException(new DatabaseException("Connection lost"));Argumenttien matcherit
Käyttäkää with()-metodissa argumenttimatchereita joustaviin assertioihin: $this->anything(), $this->equalTo(), $this->isInstanceOf().
<?php
$logger->expects($this->once())
->method("log")
->with($this->stringContains("error"));Osittaiset mockit (getMockBuilder)
Käyttäkää getMockBuilder()-metodia yhdessä onlyMethods()-metodin kanssa mockataksenne tietyt metodit ja säilyttääksenne muiden metodien todelliset toteutukset.
<?php
$svc = $this->getMockBuilder(EmailService::class)
->onlyMethods(["sendRaw"])
->getMock();
$svc->method("sendRaw")->willReturn(true);Spy-malli
Spy tallentaa kaikki kutsut, joten voitte tarkistaa ne suorituksen jälkeen — PHPUnit-mockit voivat toimia spyinä käyttämällä any()-metodia ja kaappaamalla argumentit.
Mockien injektointi
Välittäkää mockit testattavalle luokalle konstruktorin injektiolla — tämä on testattavan ja löyhästi kytketyn koodin vakiomalli.
<?php
$service = new NotificationService($mailer, $logger);
$service->notify($user);Rajapinta- ja konkreettisen luokan mockit
Rajapintojen mockaamista suositellaan — toteutuksen yksityiskohdat eivät vuoda testiin, ja testit pysyvät kelvollisina, vaikka todellinen toteutus muuttuisi.
Yhteenveto
Käyttäkää createMock()-metodia riippuvuuksien eristämiseen. Käyttäkää yhdistelmää expects()->method()->with()->willReturn() odotusten ja stubien määrittämiseen. Injektoikaa mockit konstruktorin kautta.
Pikatarkistus
Mikä metodi saa mockin palauttamaan tietyn arvon?
Opi PHP 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
- 49
- Oppitunnit
- 195
Usein kysytyt kysymykset
Onko oppitunti ”Riippuvuuksien mallintaminen PHPUnitilla” ilmainen?
Kyllä – oppitunnin ”Riippuvuuksien mallintaminen PHPUnitilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko PHP Academy-kurssin, päivitä CoddyKit PROhon. PHP Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Riippuvuuksien mallintaminen PHPUnitilla”?
Luokaa mock-olioita yksiköiden eristämiseen ja yhteistyökumppanien toiminnan hallintaan. Harjoittelet PHP Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni PHP Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin PHP Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Riippuvuuksien mallintaminen PHPUnitilla”-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ä PHP Academy-oppitunnilla?
Kyllä. Jokainen PHP Academy-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
- PHPUnitin käyttöönotto ja ensimmäinen testi
- Väitteet ja testimetodit
- Tietolähteet parametrisoiduille testeille
- Riippuvuuksien mallintaminen PHPUnitilla