{"id":230581,"date":"2022-11-29T15:34:00","date_gmt":"2022-11-29T12:34:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230581"},"modified":"2022-11-29T15:37:48","modified_gmt":"2022-11-29T12:37:48","slug":"kirjoitusyksikkoetestit-phpunitilla-osa-3-xml-kokoonpano","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/kirjoitusyksikkoetestit-phpunitilla-osa-3-xml-kokoonpano\/","title":{"rendered":"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 3: XML-kokoonpano"},"content":{"rendered":"\n<p>T\u00e4m\u00e4n sarjan aiemmissa viesteiss\u00e4 olen k\u00e4sitellyt seuraavia kahta aihetta:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kirjoitusyksikkoetestit-phpunitilla-osa-1-asennus\/\" title=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 1: Asennus\">Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 1: Asennus<\/a><strong>.<\/strong> Opas PHPUnit-testien kirjoittamisen aloittamiseen perusv\u00e4limuistin ja kehyksen setUp-menetelm\u00e4n avulla.<\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kirjoitusyksikkoetestit-phpunitilla-osa-2-tear-down\/\" title=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 2: Tear Down.\">Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 2: Tear Down.<\/a> Opetusohjelma yksikk\u00f6testien kirjoittamisesta, jotka hy\u00f6dynt\u00e4v\u00e4t oikein PHPUnitin setUp- ja tearDown-menetelmi\u00e4.<\/li>\n<\/ol>\n<p>Jokainen yll\u00e4 olevista on tarkoitettu antamaan alulle, kuinka aloittaa hyvin perusyksikk\u00f6testien kirjoittaminen. Asiat voivat muuttua monimutkaisemmiksi varsinkin sovelluksen tai projektin kasvaessa (mutta se on aina totta, eik\u00f6?).<\/p>\n<p>Mutta varmistaaksemme, ett\u00e4 ihminen on valmistautunut siihen, yksikk\u00f6testauksessa on yksi viimeinen komponentti, johon meid\u00e4n pit\u00e4isi mielest\u00e4ni keskitty\u00e4, ja se on PHPUnit XML -m\u00e4\u00e4ritystiedoston ymm\u00e4rt\u00e4minen (jonka olet ehk\u00e4 n\u00e4hnyt muissa projekteissa nimell\u00e4 phpunit.xml).<\/p>\n<h2>PHPUnit XML -kokoonpano<\/h2>\n<p>Joten t\u00e4ss\u00e4 viestiss\u00e4 aion perustaa yksinkertaisen projektin, joka k\u00e4ytt\u00e4\u00e4 PHPUnit-yksikk\u00f6\u00e4, kirjoittaa muutamia testej\u00e4, kuten olemme jo n\u00e4hneet, ja hy\u00f6dynt\u00e4\u00e4 m\u00e4\u00e4ritystiedostoa testauksen automatisoimiseksi.<\/p>\n<p>Lis\u00e4ksi aion tehd\u00e4 parhaani selitt\u00e4\u00e4kseni m\u00e4\u00e4ritystiedoston tarvittavat osat, jotta voit sis\u00e4llytt\u00e4\u00e4 sellaisen seuraavaan projektiisi.<\/p>\n<h3>1 Tiedostojen poistaminen<\/h3>\n<p>Ennen kuin aloitat testattavan koodin kirjoittamisen, on t\u00e4rke\u00e4\u00e4 tiet\u00e4\u00e4 tiedostot, joita tarvitaan prosessin toimimiseen.<\/p>\n<p>Seuraavassa on enemm\u00e4n tai v\u00e4hemm\u00e4n, kuinka <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">j\u00e4rjest\u00e4mme<\/a><\/strong> asiat projektin alusta alkaen:<\/p>\n<ul>\n<li>testihakemisto,<\/li>\n<li><strong>phpunit.xml<\/strong> &#8211; tiedosto<\/li>\n<\/ul>\n<p>Lopulta n\u00e4et my\u00f6s:<\/p>\n<ul>\n<li>tiedostot, jotka muodostavat projektin,<\/li>\n<li>testit, jotka vahvistavat mainitut tiedostot.<\/li>\n<\/ul>\n<p>T\u00e4ss\u00e4 vaiheessa katsotaan kuitenkin XML-m\u00e4\u00e4ritystiedostoa ja yritet\u00e4\u00e4n sitten suorittaa PHPUnit automaattisesti ilman muita parametreja.<\/p>\n<h3>2 M\u00e4\u00e4ritystiedoston perusteet<\/h3>\n<p>Katsotaanpa <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-00-phpunit-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ensin perusasetustiedostoa:<\/a><\/strong><\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n\n&lt;!-- http:\/\/phpunit.de\/manual\/4.1\/en\/appendixes.configuration.html --&gt;\n&lt;phpunit xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"http:\/\/schema.phpunit.de\/4.1\/phpunit.xsd\"\n         bootstrap=\".\/tests\/bootstrap.php\"\n         backupGlobals=\"false\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n&gt;\n  &lt;testsuites&gt;\n    &lt;testsuite name=\"AcmeTests\"&gt;\n      &lt;directory&gt;.\/tests&lt;\/directory&gt;\n    &lt;\/testsuite&gt;\n  &lt;\/testsuites&gt;\n\n  &lt;logging&gt;\n    &lt;log type=\"coverage-text\" target=\"php:\/\/stdout\" showUncoveredFiles=\"true\"&gt;&lt;\/log&gt;\n  &lt;\/logging&gt;\n&lt;\/phpunit&gt;\n<\/code><\/pre>\n<p>Ymm\u00e4rr\u00e4mme nyt, mit\u00e4 tarkalleen tarkastelemme (muuta kuin yksinkertaista XML:\u00e4\u00e4).<\/p>\n<ul>\n<li><strong>phpunit<\/strong>. P\u00e4\u00e4solmu tekee tavanomaisen ty\u00f6n m\u00e4\u00e4ritt\u00e4\u00e4kseen skeeman XML-tiedostolle, mutta on olemassa muutamia muita komponentteja, joista olemme erityisesti huolissamme:\n<ul>\n<li><strong>varmuuskopioGlobals.<\/strong> T\u00e4m\u00e4 liittyy itse asiassa huomautukseen, jonka voimme tehd\u00e4 l\u00e4hdekoodissamme. Globaalit ovat jotain, jota meid\u00e4n pit\u00e4isi yritt\u00e4\u00e4 v\u00e4ltt\u00e4\u00e4 olio-ohjelmoinnissa, mutta jos p\u00e4\u00e4t\u00e4t k\u00e4ytt\u00e4\u00e4 sellaista tai joudut k\u00e4ytt\u00e4m\u00e4\u00e4n sellaista, t\u00e4m\u00e4 k\u00e4skee PHPUnitin k\u00e4sittelem\u00e4\u00e4n globaalien muuttujien yll\u00e4pit\u00e4mi\u00e4 arvoja (ja antaa sinulle mahdollisuuden palauttaa niit\u00e4). Yleens\u00e4 j\u00e4t\u00e4n t\u00e4m\u00e4n ennalleen.<\/li>\n<li><strong>bootstrap.<\/strong> T\u00e4m\u00e4 on valinnainen, mutta jos p\u00e4\u00e4t\u00e4t sis\u00e4llytt\u00e4\u00e4 testiisi muita tiedostoja (kuten tuoda pilaava kirjasto, osa WordPressist\u00e4 tai kolmannen osapuolen kirjasto), t\u00e4m\u00e4 auttaa sinua m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n skriptin sijainnin, joka tarvitsee suorittaa. WordPressin pilkkaaminen ja tuominen ei kuulu t\u00e4m\u00e4n postauksen piiriin, mutta tulemme todenn\u00e4k\u00f6isesti tarkastelemaan sit\u00e4 tulevaisuudessa, koska siit\u00e4 on hy\u00f6ty\u00e4 laajennuksia testattaessa. Toistaiseksi aion sis\u00e4llytt\u00e4\u00e4 yksinkertaisen automaattilatausohjelman, joka periaatteessa lis\u00e4\u00e4 kaikki tiedostot projektihakemiston juureen. Sen t\u00e4ydellinen l\u00e4hde jaetaan my\u00f6hemmin t\u00e4ss\u00e4 viestiss\u00e4.<\/li>\n<li><strong>v\u00e4rit.<\/strong> Jos haluat, ett\u00e4 konsoli tulostaa raportin testeist\u00e4si ja k\u00e4ytt\u00e4\u00e4 v\u00e4rej\u00e4 (jotta helpottaa varoitusten, huomautusten, virheiden ja niin edelleen tunnistamista), aseta t\u00e4m\u00e4 arvoksi tosi.<\/li>\n<li>Seuraavat ovat kaikki loogisia arvoja. Suosittelen, ett\u00e4 asetat ne <strong>todeksi<\/strong>, jotta saat mahdollisimman aggressiivisia raportteja. T\u00e4ll\u00e4 tavalla et p\u00e4\u00e4se eroon siit\u00e4, ett\u00e4 ilmoitukset tai varoitukset lipsahtavat l\u00e4pi samalla kun olet huolissasi virheist\u00e4. T\u00e4m\u00e4 on enemm\u00e4n koodin laadun harjoittelua kuin mik\u00e4\u00e4n muu.\n<ul>\n<li><strong>convertErrorsToExceptions<\/strong><\/li>\n<li><strong>convertNoticesToExceptions<\/strong><\/li>\n<li><strong>muuntaa WarningsToExceptions<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>testisarjat<\/strong> koostuvat testikokoelmista. Koska tietyss\u00e4 projektissa voi olla useita testej\u00e4, on t\u00e4rke\u00e4\u00e4 varmistaa, ett\u00e4 annat jokaiselle sarjalle yksil\u00f6llisen nimen ja viittaat oikean polun testiryhm\u00e4\u00e4n. Esimerkiss\u00e4mme meill\u00e4 on vain yksi testipaketti ja se sijaitsee <strong>testihakemistossa<\/strong>.<\/li>\n<li><strong>loki<\/strong> on ominaisuus, joka voi olla niinkin yksinkertaista kuin tietojen tulostaminen konsoliin tai kolmannen osapuolen kirjaston (kuten <strong><a href=\"https:\/\/confluence.atlassian.com\/clover\/clover-documentation-home-71598318.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Clover<\/a><\/strong>) k\u00e4ytt\u00e4minen raporttien luomiseen, jotka auttavat jatkuvassa integraatiossa. Koska en ole viel\u00e4 keskustellut j\u00e4lkimm\u00e4isest\u00e4 miss\u00e4\u00e4n aiemmissa viesteiss\u00e4ni, aiomme pysy\u00e4 konsolissa p\u00e4\u00e4asiallisena tulostusmenetelm\u00e4n\u00e4mme. Siten php <strong>:\/\/stdout<\/strong> on ainoa lokitulostamme.<\/li>\n<\/ul>\n<p>Kaiken t\u00e4m\u00e4n j\u00e4lkeen XML-tiedostossamme on kaikki mit\u00e4 PHPUnit tarvitsee toimiakseen ilman muita parametreja.<\/p>\n<p>Muista kuitenkin, ennen kuin jatkat t\u00e4m\u00e4n artikkelin loppuun, oletan, ett\u00e4 olet asentanut PHPUnitin maailmanlaajuisesti j\u00e4rjestelm\u00e4\u00e4si Composerin avulla. Jos ei, tutustu <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/saeveltaejae-wordpressille-osa-1\/\" title=\"t\u00e4h\u00e4n artikkeliin\">t\u00e4h\u00e4n artikkeliin<\/a><\/strong>, sill\u00e4 se sis\u00e4lt\u00e4\u00e4 ohjeet sen tekemiseen.<\/p>\n<p>Kun olet valmis, voit varmistaa, ett\u00e4 PHPUnit on asennettu kirjoittamalla seuraavan komennon p\u00e4\u00e4tteeseen:<\/p>\n<pre><code>$ which phpunit<\/code><\/pre>\n<p>Ja sinun pit\u00e4isi n\u00e4hd\u00e4 jotain seuraavanlaista:<\/p>\n<\/p>\n<p>Jos n\u00e4et jotain yll\u00e4 olevan kaltaista, voit suorittaa PHPUnitin miss\u00e4 tahansa j\u00e4rjestelm\u00e4ss\u00e4si.<\/p>\n<h3>3 Bootstrap-tiedosto<\/h3>\n<p>Ennen kuin jatkat, kirjoitetaan perus bootstrap-tiedosto. Kutsumme sit\u00e4 nimell\u00e4 <strong>bootstrap.php<\/strong> ja pudotamme sen <strong>testihakemistoomme<\/strong>. Se sis\u00e4lt\u00e4\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-01-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavat:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\/\/ This array has a single file but could whole the contents of an entire directory.\n$files = [\n    dirname(__DIR__).'\/AcmeCache.php',\n];\n\nforeach ($files as $file) {\n    if (file_exists($file)) {\n        require_once $file;\n    }\n}\n<\/code><\/pre>\n<p>T\u00e4m\u00e4 on yksinkertainen &quot;autoloader&quot; (jota ep\u00e4r\u00f6im\u00e4tt\u00e4 kutsun sill\u00e4, koska se vain toistaa tiedostoja ja vaatii niit\u00e4, mutta se toimii meid\u00e4n tarkoituksissamme).<\/p>\n<p>T\u00e4ss\u00e4 vaiheessa tehd\u00e4\u00e4n perustesti.<\/p>\n<h3>4 Perustesti, hyl\u00e4tty<\/h3>\n<p>Jos luet jotain testil\u00e4ht\u00f6isest\u00e4 kehityksest\u00e4, kuulet todenn\u00e4k\u00f6isesti punavihre\u00e4n toiston syklist\u00e4. Siit\u00e4 on paljon sanottavaa, ja suosittelen <strong><a href=\"http:\/\/blog.cleancoder.com\/uncle-bob\/2014\/12\/17\/TheCyclesOfTDD.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sen lukemista<\/a><\/strong>, mutta se ei ole t\u00e4m\u00e4n viestin tarkoitus.<\/p>\n<p>Sen sijaan keskitymme enemm\u00e4n siihen, ett\u00e4 kirjoitamme testej\u00e4, jotka vastaavat sit\u00e4, mit\u00e4 meid\u00e4n on teht\u00e4v\u00e4, eik\u00f6 niin? Tehd\u00e4\u00e4n sitten n\u00e4in:<\/p>\n<ol>\n<li>luo hakemisto, josta sinulla on joitain PHP-perustiedostoja, joita testaamme,<\/li>\n<li>luo hakemiston juureen my\u00f6s <strong>phpunit.xml<\/strong> ja t\u00e4yt\u00e4 se k\u00e4ytt\u00e4m\u00e4ll\u00e4 aiemmin t\u00e4ss\u00e4 viestiss\u00e4 jaettua koodia<\/li>\n<li>Luo <strong>testihakemisto,<\/strong> johon sijoitamme testimme.<\/li>\n<\/ol>\n<p>Vaihda nyt terminaalista hakemisto projektin hakemistoon (josta toistaiseksi puuttuu) ja suorita sitten <strong>php<em><\/em><\/strong> unit<em><\/em>:<\/p>\n<pre><code>$ phpunit<\/code><\/pre>\n<p>Olettaen, ett\u00e4 kaikki on asetettu oikein, sinun pit\u00e4isi n\u00e4hd\u00e4 jotain t\u00e4llaista:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7588ea742f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7588ea742f.png\" alt=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 3: XML-kokoonpano\"><\/a><\/p>\n<p>Koska meill\u00e4 ei ole koodia eik\u00e4 testej\u00e4, n\u00e4emme luonnollisesti yll\u00e4 olevan tulosteen, eik\u00f6 niin? Joten kirjoitetaan yksi testi, joka suoritetaan (ja ep\u00e4onnistuu), koska sille ei ole varsinaista testattavaa koodia.<\/p>\n<p>Luo ensin <strong>testihakemistoon<\/strong> tiedosto nimelt\u00e4 <strong>AcmeCacheTest.php.<\/strong> Ja annetaan sen tehd\u00e4 jotain yksinkertaista, kuten <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-03-failing-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">luoda v\u00e4limuistiobjekti<\/a><\/strong>, jonka lopulta luomme.<\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n}\n<\/code><\/pre>\n<p>Ennen testin suorittamista huomaa, ett\u00e4:<\/p>\n<ol>\n<li>Varmista, ett\u00e4 <strong>k\u00e4yt\u00e4t PHPUnitFrameworkTestCasea<\/strong><\/li>\n<li>Ja <strong>anna luokkamme laajentaa TestCasea<\/strong><\/li>\n<\/ol>\n<p>T\u00e4m\u00e4 on osa sit\u00e4, mik\u00e4 tekee PHPUnitin k\u00e4yt\u00f6st\u00e4 niin helppoa. Kun t\u00e4m\u00e4 on tehty, suorita seuraava koodi projektisi juuresta:<\/p>\n<pre><code>$ phpunit<\/code><\/pre>\n<p>Sen j\u00e4lkeen sinun pit\u00e4isi n\u00e4hd\u00e4 seuraava:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75891b9ec8.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75891b9ec8.png\" alt=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 3: XML-kokoonpano\"><\/a><\/p>\n<p>Huomaa, ett\u00e4 t\u00e4m\u00e4 antaa ep\u00e4onnistuneen testin ja kertoo, <strong>mist\u00e4<\/strong> ongelma l\u00f6ydettiin, tiedostosta ja rivist\u00e4.<\/p>\n<p>T\u00e4m\u00e4n korjaamiseksi <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-04-acme-cache-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">meid\u00e4n on kirjoitettava luokka:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nclass AcmeCache\n{\n    private $duration;\n\n    public function __construct()\n    {\n        $this-&gt;duration = 43200;\n    }\n\n    public function setDuration(int $duration)\n    {\n        $this-&gt;duration = $duration;\n    }\n\n    public function getDuration(): int\n    {\n        return $this-&gt;duration;\n    }\n}\n<\/code><\/pre>\n<h3>4 Muutama perustesti, l\u00e4p\u00e4isev\u00e4 testi<\/h3>\n<p>Perusl\u00e4p\u00e4isykoe (joka perustuu edelliseen koodiin) sis\u00e4lt\u00e4\u00e4 seuraavat:<\/p>\n<ul>\n<li>nimiv\u00e4lill\u00e4 oleva tiedosto,<\/li>\n<li>edustaa yksinkertaista v\u00e4limuistia,<\/li>\n<li>PHPUnit lataa sen automaattisesti k\u00e4ytt\u00e4m\u00e4ll\u00e4 yll\u00e4 jaettua <strong>bootstrap.php<\/strong> &#8211; tiedostoa<\/li>\n<li>ja sen rakentajassa on asetettu kesto sek\u00e4 arvon asettaja ja getteri<\/li>\n<\/ul>\n<p>Testataan ensin, ett\u00e4 pystymme m\u00e4\u00e4ritt\u00e4m\u00e4\u00e4n luokan ja ettei se ole tyhj\u00e4. T\u00e4m\u00e4 on hieman tarpeeton v\u00e4ite, koska tied\u00e4mme, ett\u00e4 meill\u00e4 on luokka oikein instantoituna, mutta se vie meid\u00e4t <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-03-failing-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kokeiden kirjoittamisen uraan:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n}\n<\/code><\/pre>\n<p>Ja suorita testi:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75894bbad2.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e75894bbad2.png\" alt=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 3: XML-kokoonpano\"><\/a><\/p>\n<p>Seuraavaksi tarkistetaan, ett\u00e4 v\u00e4limuistin oletusarvo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-05-test-2-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on asetettu:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n\n    public function testDefaultCacheValue()\n    {\n        $this-&gt;assertSame(43200, $this-&gt;cache-&gt;getDuration());\n    }\n}\n<\/code><\/pre>\n<p>Suorita testit edellisen vaiheen tapaan, ja sinun pit\u00e4isi nyt n\u00e4hd\u00e4 kaksi l\u00e4p\u00e4isev\u00e4\u00e4 testi\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589770dbe.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589770dbe.png\" alt=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 3: XML-kokoonpano\"><\/a><\/p>\n<p>Lopuksi testataan, voimmeko <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/2ae5a6b3afb7afebf200670a923f30ea#file-05-test-3-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">muuttaa arvoa onnistuneesti:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace AcmeTests;\n\nuse PHPUnitFrameworkTestCase;\nuse AcmeAcmeCache;\n\nclass AcmeCacheTest extends TestCase\n{\n    private $cache;\n\n    public function setUp()\n    {\n        $this-&gt;cache = new AcmeCache();\n    }\n\n    public function testCacheExists()\n    {\n        $this-&gt;assertNotNull($this-&gt;cache);\n    }\n\n    public function testDefaultCacheValue()\n    {\n        $this-&gt;assertSame(43200, $this-&gt;cache-&gt;getDuration());\n    }\n\n    public function testSetCustomDuration()\n    {\n        $duration = 4200;\n\n        $this-&gt;cache-&gt;setDuration($duration);\n        $this-&gt;assertSame($duration, $this-&gt;cache-&gt;getDuration());\n    }\n}\n<\/code><\/pre>\n<p>Ja kolme viimeist\u00e4 l\u00e4p\u00e4isykoetta:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589a7745a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-163700-61e7589a7745a.png\" alt=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 3: XML-kokoonpano\"><\/a><\/p>\n<p>Ja siin\u00e4 se on:<\/p>\n<ol>\n<li>PHPUnit XML -tiedosto,<\/li>\n<li>yksinkertainen bootstrap,<\/li>\n<li>yksi, nimiv\u00e4litetty luokka,<\/li>\n<li>yksikk\u00f6testit jokaiselle luokan menetelm\u00e4lle<\/li>\n<\/ol>\n<p>My\u00f6nnett\u00e4k\u00f6\u00f6n, se on yksinkertaista, mutta t\u00e4m\u00e4 antaa perusteet paljon enemm\u00e4n kuin mit\u00e4 monet ihmiset jo tekev\u00e4t testeill\u00e4\u00e4n.<\/p>\n<p>Lis\u00e4ksi se antaa sinulle rakentamisen varaa, kun testikyljyksesi vahvistuvat.<\/p>\n<h2>Onko enemm\u00e4n? (Aina oikeassa?)<\/h2>\n<p>Lopuksi, jos olet innokas todella sukeltamaan asetustiedostoon, voit lukea sen k\u00e4sikirjan <strong><a href=\"https:\/\/phpunit.de\/manual\/6.5\/en\/appendixes.configuration.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">perusteellisen<\/a><\/strong> selityksen.<\/p>\n<p>Huomaa kuitenkin, ett\u00e4 kaikki yll\u00e4 kuvattu pyrkii olemaan sit\u00e4, mit\u00e4 tarvitset oman PHPUnit XML -asetustiedoston m\u00e4\u00e4ritt\u00e4misen aloittamiseen.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Perusopas PHPUnit XML -m\u00e4\u00e4ritystiedoston ymm\u00e4rt\u00e4miseen ja sen yhdist\u00e4miseen helpompaan yksikk\u00f6testaukseen.<\/p>\n","protected":false},"author":1,"featured_media":163701,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,843,803],"tags":[1166],"class_list":["post-230581","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-opetusohjelmia","category-php-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=230581"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230581\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/163701"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}