{"id":230509,"date":"2022-11-27T14:13:00","date_gmt":"2022-11-27T11:13:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230509"},"modified":"2022-11-27T14:17:39","modified_gmt":"2022-11-27T11:17:39","slug":"kirjoitusyksikkoetestit-phpunitilla-osa-2-tear-down","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/kirjoitusyksikkoetestit-phpunitilla-osa-2-tear-down\/","title":{"rendered":"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 2: Tear Down"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kirjoitusyksikkoetestit-phpunitilla-osa-1-asennus\/\" title=\"Viime kuun lopulla\">Viime kuun lopulla<\/a><\/strong> aloin puhua yksikk\u00f6testien kirjoittamisesta PHPUnitissa WordPress-pohjaiselle koodille. T\u00e4m\u00e4 sis\u00e4lsi ensisijaisesti ajatuksen PHPUnit: n asettamisesta, <strong>setUp<\/strong> &#8211; <strong><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">funktiosta<\/a><\/strong> ja perustestien kirjoittamisesta.<\/p>\n<p>T\u00e4m\u00e4 ei kuitenkaan k\u00e4sitellyt sit\u00e4, mit\u00e4 tied\u00e4n <strong>tearDown-<\/strong> toiminnosta, joka on edelleen t\u00e4rke\u00e4 ominaisuus testeill\u00e4 kirjoittamisessa. Lis\u00e4ksi on my\u00f6s kaksi tapaa harkita testien kirjoittamista WordPress-projekteihin.<\/p>\n<p>Nimitt\u00e4in:<\/p>\n<ol>\n<li>kirjoitustestit erityisesti laajennuksia ja sovellustason toimintoja varten,<\/li>\n<li>yksikk\u00f6testien suorittaminen WordPress-sovellusta vastaan.<\/li>\n<\/ol>\n<p>Ennen kuin siirryt eteenp\u00e4in t\u00e4ss\u00e4 postauksessa, suosittelen kuitenkin perehtym\u00e4\u00e4n siihen, mit\u00e4 olen k\u00e4sitellyt t\u00e4h\u00e4n menness\u00e4. T\u00e4m\u00e4 sis\u00e4lt\u00e4\u00e4 seuraavat viestit:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-kehitysympaeristoe-kaeyttaemaellae-paketinhallintaa\/\" title=\"WordPress-kehitysymp\u00e4rist\u00f6 (k\u00e4ytt\u00e4m\u00e4ll\u00e4 paketinhallintaa)\">WordPress-kehitysymp\u00e4rist\u00f6 (k\u00e4ytt\u00e4m\u00e4ll\u00e4 paketinhallintaa)<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/ide-wordpressin-kehittaemiseen-kokemuksesta-riippumatta\/\" title=\"IDE WordPressin kehitt\u00e4miseen\">IDE WordPressin kehitt\u00e4miseen<\/a><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kaeyttaejaeasetusten-kaeyttaeminen-visual-studio-codessa\/\" title=\"K\u00e4ytt\u00e4j\u00e4asetusten k\u00e4ytt\u00e4minen Visual Studio Codessa\">K\u00e4ytt\u00e4j\u00e4asetusten k\u00e4ytt\u00e4minen Visual Studio Codessa<\/a><\/strong><\/li>\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><\/li>\n<\/ol>\n<p>Kun olet tehnyt sen, palaa t\u00e4h\u00e4n viestiin ja jatketaan keskustelua tearDown-toiminnosta ja siit\u00e4, milt\u00e4 yksikk\u00f6testit WordPressin yhteydess\u00e4 todella n\u00e4ytt\u00e4v\u00e4t.<\/p>\n<h2>Yksikk\u00f6testit PHPUnitilla, Osa 2: Tear Down<\/h2>\n<p>Ennen kuin siirryt eteenp\u00e4in, muista, ett\u00e4 kehitt\u00e4j\u00e4t kohtelevat usein <strong>setUp<\/strong> -funktiota kuin rakentajaa ja <strong>tearDown-<\/strong> funktiota kuin tuhoajaa. Muista kuitenkin, ett\u00e4 j\u00e4lkimm\u00e4ist\u00e4 ei aina tarvita.<\/p>\n<p>T\u00e4ss\u00e4 on hyv\u00e4 peukalos\u00e4\u00e4nt\u00f6 muistaa:<\/p>\n<ul>\n<li>Kaikki testifunktion tarpeet kutsuvat <strong>setUp<\/strong> &#8211; funktiota, jotta tarvittavat luokat tarvitaan.<\/li>\n<li>TearDown &#8211; toimintoa ei aina tarvita, koska <strong>setUp<\/strong> <strong>&#8211;<\/strong> toiminto voi alustaa luokan uudelleen.<\/li>\n<\/ul>\n<p>Joten mit\u00e4 t\u00e4m\u00e4 tarkoittaa <strong>tearDown-<\/strong> toiminnolle, jos se ei nollaa tietoja, jotka on luotu <strong>asetustoiminnon<\/strong> aikana ?<\/p>\n<h3>1 Rep\u00e4isytoiminto<\/h3>\n<p>Paras neuvo, jonka voin antaa <strong>tearDown-<\/strong> toiminnon suhteen, on se, ett\u00e4 sit\u00e4 tulisi k\u00e4ytt\u00e4\u00e4, jos jokin j\u00e4\u00e4 j\u00e4ljelle j\u00e4\u00e4neen testin aikana.<\/p>\n<p>T\u00e4m\u00e4 voi olla jotain, joka on kirjoitettu tietokantaan, jotain, joka on kirjoitettu lokiin, tai yleisemmin jotain, joka on kirjoitettu kiintolevylle.<\/p>\n<p>N\u00e4in ollen, jos testi kirjoittaa tietueen tai tiedoston, <strong>tearDown-<\/strong> menetelm\u00e4 suoritetaan testin j\u00e4lkeen ja sen pit\u00e4isi poistaa asemalle tallennetut testit, jotka eiv\u00e4t ole osa testi\u00e4, mutta joita ei tarvita pysyv\u00e4sti seuraavaa testi\u00e4 varten tai pit\u00e4isi siivota itsens\u00e4 j\u00e4lkeen.<\/p>\n<p>Joten tietyss\u00e4 mieless\u00e4 se on kuin <strong><a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/destructor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tuhoaja<\/a><\/strong>, mutta jos et ole koskaan k\u00e4ytt\u00e4nyt kielt\u00e4, jolla on tuhoaja, nimist\u00f6 joko vaikuttaa ep\u00e4olennaiselta tai siin\u00e4 ei ole j\u00e4rke\u00e4.<\/p>\n<blockquote>\n<p>Tuhoaja\u00a0 on erityinen <strong>j\u00e4senfunktio<\/strong>, jota kutsutaan, kun objektin elinik\u00e4 p\u00e4\u00e4ttyy. <strong>Tuhoajan<\/strong> tarkoitus \u00a0on vapauttaa resurssit, jotka esine on saattanut hankkia elinaikanaan.<\/p>\n<\/blockquote>\n<p>Siksi ehk\u00e4 on parempi ajatella funktiota yksinkertaisesti tapana puhdistaa testin j\u00e4lkeen (eik\u00e4 siin\u00e4 mieless\u00e4, ett\u00e4 muuttuja asetetaan yht\u00e4 suureksi kuin null, koska <strong>setUp<\/strong> &#8211; funktio voi tehd\u00e4 sen).<\/p>\n<h3>2 yksikk\u00f6testi\u00e4 WordPress-projekteille<\/h3>\n<p>Kun kirjoitamme yksikk\u00f6testej\u00e4 WordPress-projekteille, meid\u00e4n on varmistettava, ett\u00e4 olemme selvill\u00e4 siit\u00e4, mink\u00e4 tyyppisist\u00e4 yksikk\u00f6testeist\u00e4 puhumme.<\/p>\n<p>Esimerkiksi se, mit\u00e4 kutsun klassisiksi tai vakioyksikk\u00f6testeiksi, noudattaa &quot;testil\u00e4ht\u00f6ist\u00e4 kehityst\u00e4&quot; -metodologiaa, josta puhun hetken kuluttua. Toisaalta WordPressill\u00e4 on omat yksikk\u00f6testit teemoille ja vastaaville, joista kerron my\u00f6s hieman my\u00f6hemmin t\u00e4ss\u00e4 postauksessa.<\/p>\n<p>Mutta t\u00e4ss\u00e4 osiossa ajattelin, ett\u00e4 voisi olla hy\u00f6dyllist\u00e4 puhua hieman edellisest\u00e4 j\u00e4lkimm\u00e4isen sijaan, jotta n\u00e4et, kuinka t\u00e4m\u00e4 voisi toimia.<\/p>\n<p>Alla olevassa esimerkiss\u00e4 kirjoitan testej\u00e4 laajennukselle, joka vastaa viestinn\u00e4st\u00e4 kolmannen osapuolen API:n kanssa. T\u00e4m\u00e4 lis\u00e4osa vaatii k\u00e4ytt\u00e4j\u00e4tunnuksen ja salasanan tai API :n, <strong>ja<\/strong> haluamme varmistaa, ett\u00e4 t\u00e4m\u00e4n viestin tarkoituksia varten se hakee virheen oikein aina, kun testi suoritetaan.<\/p>\n<p>Huomaa, ett\u00e4 kun luet t\u00e4t\u00e4 koodia l\u00e4pi, n\u00e4et minun puhuvan hieman heijastuksesta. Aion tehd\u00e4 koko postauksen PHP Reflectionista pian, joten se valaisee t\u00e4t\u00e4.<\/p>\n<p>Oletetaan kuitenkin, ett\u00e4 alla olevan koodin tapauksessa voimme p\u00e4\u00e4st\u00e4 k\u00e4siksi kiinteist\u00f6ihin, jotka on muuten merkitty yksityisiksi.<\/p>\n<p>Muista t\u00e4m\u00e4n sarjan viimeinen viesti, meill\u00e4 oli ensimm\u00e4inen testi, joka n\u00e4ytti <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/248c7741273e6be414c1f98c11085fe7#file-01-acme-cache-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeCacheTest extends TestCase\n{\n  protected $cache;\n\n  protected function setUp()\n  {\n    $this-&gt;cache = new AcmeCache();\n  }\n\n  public function testDefaultDuration()\n  {\n    $this-&gt;assertTrue($this-&gt;cache-&gt;getDuration() === 43200);\n  }\n\n  public function testNewDuration()\n  {\n    $this-&gt;cache-&gt;setDuration(1000);\n\n    $this-&gt;assertFalse($this-&gt;cache-&gt;getDuration() === 43200);\n    $this-&gt;assertTrue($this-&gt;cache-&gt;getDuration() === 1000);\n  }\n\n  \/\/ More to come...\n}<\/code><\/pre>\n<p>Huomaa kuitenkin, ett\u00e4 t\u00e4ss\u00e4 testiss\u00e4 ei ole <strong>tearDown-<\/strong> toimintoa, joka olisi j\u00e4rkev\u00e4, eik\u00f6 niin? Loppujen lopuksi mit\u00e4\u00e4n ei kirjoiteta tietokantaan tai tiedostoon.<\/p>\n<p>Mutta oletetaan, ett\u00e4 haluamme ottaa k\u00e4ytt\u00f6\u00f6n testitapauksen, jossa on tiedostonimi, sis\u00e4lt\u00f6 ja se kirjoittaa sis\u00e4ll\u00f6n tiedostoon. T\u00e4ss\u00e4 tapauksessa se tulee olemaan staattista dataa, mutta se voi teknisesti olla mit\u00e4 tahansa levylle kirjoitettua.<\/p>\n<h4>1 Testin m\u00e4\u00e4ritt\u00e4minen<\/h4>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-00-initial-set-up-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ensin<\/a><\/strong> haluamme m\u00e4\u00e4ritt\u00e4\u00e4 testin m\u00e4\u00e4ritt\u00e4m\u00e4ll\u00e4 tiedostonimen, tiedoston sis\u00e4ll\u00f6n ja valmistelemalla ominaisuudet.<\/p>\n<pre><code>&lt;?php\n\nnamespace PresswareAcmeTestsAPI;\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeFileTest extends TestCase\n{\n\n  private $filename;\n\n  private $content;\n\n  public function setUp()\n  {\n    $this-&gt;filename = 'testFile.txt';\n    $this-&gt;content = 'This is a string of data that is meant to be written to the file.';\n  }\n\n  \/\/ More to come...\n}\n<\/code><\/pre>\n<p>Tarpeeksi helppoa, eik\u00f6?<\/p>\n<h4>2 Kirjoita ja lue tietoja<\/h4>\n<p>Seuraavaksi haluamme kirjoittaa tiedot, lukea tiedot ja vakuuttaa, ett\u00e4 sis\u00e4lt\u00f6 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-01-testing-contents-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">on sama.<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\nnamespace PresswareAcmeTestsAPI;\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeFileTest extends TestCase\n{\n\n  private $filename;\n\n  private $content;\n\n  public function setUp()\n  {\n    $this-&gt;filename = 'testFile.txt';\n    $this-&gt;content = 'This is a string of data that is meant to be written to the file.';\n  }\n\n  public function testWriteReadData()\n  {    \n    \/\/ Writes the content to the file with the given filename.\n    $fileHandle = fopen($this-&gt;filename, 'w');\n    fwrite($fileHandle, $this-&gt;content);\n    fclose($fileHandle);\n\n    \/\/ Reads the contents of the file that was just written\n    $fileHandle = fopen($this-&gt;filename, 'r');\n    $contents = fread($fileHandle, filesize($this-&gt;filename));\n    fclose($fileHandle);\n\n    $this-&gt;assertSame($this-&gt;content, $contents);\n  }\n\n  \/\/ More to come..\n}\n<\/code><\/pre>\n<p>T\u00e4ss\u00e4 vaiheessa, jos suoritat testin (jonka tekemiseen en ole viel\u00e4 perehtynyt teknisesti), huomaat, ett\u00e4 <strong>testFile.txt<\/strong> on edelleen j\u00e4rjestelm\u00e4ss\u00e4si.<\/p>\n<h4>3 TearDownin k\u00e4ytt\u00e4minen<\/h4>\n<p>Lopuksi meid\u00e4n on ty\u00f6skennelt\u00e4v\u00e4 <strong>tearDown-<\/strong> menetelm\u00e4n kanssa varmistaaksemme, ett\u00e4 tiedosto poistetaan yksikk\u00f6testin p\u00e4\u00e4tytty\u00e4. <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/ca4f83191255e661a84e3563b27263de#file-02-full-test-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">T\u00e4lt\u00e4 se voi n\u00e4ytt\u00e4\u00e4<\/a><\/strong>, jos olet ottanut koodisi k\u00e4ytt\u00f6\u00f6n yll\u00e4 olevan kuvan mukaisesti.<\/p>\n<pre><code>&lt;?php\n\nnamespace PresswareAcmeTestsAPI;\n\nuse PHPUnitFrameworkTestCase;\n\nclass AcmeFileTest extends TestCase\n{\n\n  private $filename;\n\n  private $content;\n\n  public function setUp()\n  {\n    $this-&gt;filename = 'testFile.txt';\n    $this-&gt;content = 'This is a string of data that is meant to be written to the file.';\n  }\n\n  public function testWriteReadData()\n  {    \n    \/\/ Writes the content to the file with the given filename.\n    $fileHandle = fopen($this-&gt;filename, 'w');\n    fwrite($fileHandle, $this-&gt;content);\n    fclose($fileHandle);\n\n    \/\/ Reads the contents of the file that was just written\n    $fileHandle = fopen($this-&gt;filename, 'r');\n    $contents = fread($fileHandle, filesize($this-&gt;filename));\n    fclose($fileHandle);\n\n    $this-&gt;assertSame($this-&gt;content, $contents);\n  }\n\n  public function tearDown()\n  {\n    if (file_exists($this-&gt;filename)) {\n      unlink($this-&gt;filename);\n    }\n  }\n}\n<\/code><\/pre>\n<p>Huomaa, ett\u00e4 <strong>tearDown-<\/strong> menetelm\u00e4ss\u00e4 tarkistan ensin, onko <a href=\"https:\/\/php.net\/manual\/en\/function.file-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">file_exists<\/a>. T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 jos yrit\u00e4t yksinkertaisesti <a href=\"https:\/\/php.net\/manual\/en\/function.unlink.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">poistaa linkityksen<\/a> tiedostosta, jota ei ole, saat virheilmoituksen suorittaessasi testej\u00e4, koska jos <strong>tearDown<\/strong> on olemassa, se yritt\u00e4\u00e4 poistaa jotain jokaisen testitoiminnon j\u00e4lkeen. Ja jos tiedostoa ei ole olemassa, sill\u00e4 ei ole mit\u00e4\u00e4n poistettavaa, joten se aiheuttaa ongelman.<\/p>\n<p>Joten yrit\u00e4n kirjoittaa koodia puolustavasti, uskon sen olevan vastuussa tiedoston olemassaolon tarkistamisesta ennen sen poistamista.<\/p>\n<h3>3 Toimintaj\u00e4rjestys<\/h3>\n<p>Kun kyse on puhtaasta yksikk\u00f6testauksesta, luet t\u00e4m\u00e4n yleens\u00e4 <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Test-driven_development\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">testil\u00e4ht\u00f6isen kehityksen kannalta<\/a><\/strong>. T\u00e4m\u00e4 on iso aihe sin\u00e4ns\u00e4; On kuitenkin syyt\u00e4 mainita t\u00e4ss\u00e4, jos p\u00e4\u00e4t\u00e4t tutkia sit\u00e4 edelleen ja jopa ottaa sen k\u00e4ytt\u00f6\u00f6n kehitysty\u00f6ss\u00e4si.<\/p>\n<p>T\u00e4m\u00e4n l\u00e4hestymistavan taustalla olevaa yleist\u00e4 ajatusta kutsutaan usein &quot;punavihre\u00e4ksi toistoksi&quot;. Ja en kiell\u00e4 sit\u00e4, t\u00e4ss\u00e4 l\u00e4hestymistavassa on jotain. Nimitt\u00e4in sen avulla voit kehitt\u00e4j\u00e4n\u00e4 kirjoittaa koodin sellaisena kuin odotat sen toimivan ennen kuin kirjoitat koodin.<\/p>\n<p>Sen takana oleva psykologia on seuraava: Jos tied\u00e4t kuinka koodi toimii, kirjoitat todenn\u00e4k\u00f6isemmin testej\u00e4, jotka l\u00e4p\u00e4isev\u00e4t; kun taas jos kirjoitat testej\u00e4 koodin suorituskyvyst\u00e4, sinun tulee kirjoittaa parempi koodi.<\/p>\n<p>Valitettavasti meill\u00e4 ei aina ole varaa siihen ylellisyyteen. Mutta se ei tarkoita, ett\u00e4 meid\u00e4n pit\u00e4isi heitt\u00e4\u00e4 sananlasku vauva ulos veden kanssa. Sen sijaan olen sit\u00e4 mielt\u00e4, ett\u00e4 sinun pit\u00e4isi kirjoittaa testej\u00e4, kun voit, ja kirjoittaa koodi sen j\u00e4lkeen; muussa tapauksessa kirjoita testisi koodisi j\u00e4lkeen.<\/p>\n<p>Loppujen lopuksi testaus siit\u00e4 riippumatta on parempi kuin ei testej\u00e4 ollenkaan.<\/p>\n<h3>4 Testaus WordPressill\u00e4<\/h3>\n<p>Mit\u00e4 tulee yksikk\u00f6testaukseen WordPressiss\u00e4, olet todenn\u00e4k\u00f6isesti t\u00f6rm\u00e4nnyt muutamaan asiaan. Joskus sis\u00e4lt\u00f6 on harhaanjohtavaa tai jopa harhaanjohtavaa &quot;WordPressin yksikk\u00f6testauksen&quot; suhteen.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164139-61e75e67162bf.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-164139-61e75e67162bf.png\" alt=\"Kirjoitusyksikk\u00f6testit PHPUnitilla, Osa 2: Tear Down\"><\/a><\/p>\n<p>T\u00e4ss\u00e4 tapauksessa on kaksi huomionarvoista asiaa:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/codex.wordpress.org\/Theme_Unit_Test\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Teemayksikk\u00f6testi<\/a><\/strong>. T\u00e4m\u00e4 sis\u00e4lt\u00f6sarja on tarkoitettu auttamaan teemakehitt\u00e4ji\u00e4 testaamaan kaikki t\u00e4rkeimm\u00e4t ja pienet tapaukset teemoilleen. Ei ole olemassa esimerkiksi automatisoituja ty\u00f6kaluja, joita k\u00e4ytt\u00e4isit kuten edell\u00e4 k\u00e4sitelless\u00e4mme.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/core\/handbook\/testing\/automated-testing\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Automaattinen testaus<\/a><\/strong>. WordPress toimitetaan omilla yksikk\u00f6testeill\u00e4, joten meid\u00e4n ei tarvitse kirjoittaa testej\u00e4 useimpia WordPressin toimintoja vastaan \u200b\u200b(kuten toimivatko API-toiminnot odotetulla tavalla vai eiv\u00e4t). T\u00e4m\u00e4n ansiosta voimme keskitty\u00e4 oman verkkoalueen logiikkamme yksikk\u00f6testien kirjoittamiseen.<\/li>\n<li><strong><a href=\"https:\/\/make.wordpress.org\/cli\/handbook\/plugin-unit-tests\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Plugin Unit Tests<\/a><\/strong>. Jos olet k\u00e4ytt\u00e4nyt WP-CLI:t\u00e4 (tai olet kiinnostunut siit\u00e4), olet todenn\u00e4k\u00f6isesti lukenut t\u00e4m\u00e4n sivun tai jopa k\u00e4ytt\u00e4nyt t\u00e4t\u00e4 ty\u00f6kalua. Se on hy\u00f6dyllinen, mutta se kohdistuu my\u00f6s tiettyihin WordPress-laajennusten testaamiseen.<\/li>\n<\/ol>\n<p>Kaikki yll\u00e4 oleva on hy\u00f6dyllist\u00e4 tietoa, enk\u00e4 tarkoita, ett\u00e4 niit\u00e4 tulisi j\u00e4tt\u00e4\u00e4 huomiotta. Sen sijaan se tulisi yhdist\u00e4\u00e4 muuhun t\u00e4ss\u00e4 viestiss\u00e4 k\u00e4ytettyyn tietoon.<\/p>\n<h2>Yksikk\u00f6testien suorittaminen<\/h2>\n<p>Seuraavassa viestiss\u00e4 opastan sinut l\u00e4pi kaiken, mit\u00e4 sinun tarvitsee tiet\u00e4\u00e4 m\u00e4\u00e4ritt\u00e4\u00e4ksesi XML-tiedoston, joka kertoo PHPUnitille testien sijainnin ja niiden suorittamisen.<\/p>\n<p>Tarkista kuitenkin toistaiseksi t\u00e4ss\u00e4 viestiss\u00e4 oleva koodi ja valmistaudu rakentamaan sit\u00e4 t\u00e4m\u00e4n sarjan seuraavassa viestiss\u00e4.<\/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>Opetusohjelma yksikk\u00f6testien kirjoittamiseen, jotka hy\u00f6dynt\u00e4v\u00e4t oikein PHPUnitin asennus- ja purkumenetelmi\u00e4.<\/p>\n","protected":false},"author":1,"featured_media":164140,"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-230509","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\/230509","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=230509"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/230509\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/164140"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=230509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=230509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=230509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}