{"id":229889,"date":"2022-11-26T12:17:00","date_gmt":"2022-11-26T09:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229889"},"modified":"2022-11-26T12:17:25","modified_gmt":"2022-11-26T09:17:25","slug":"kirjutamisueksuse-testid-phpunitiga-1-osa-seadistamine","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/kirjutamisueksuse-testid-phpunitiga-1-osa-seadistamine\/","title":{"rendered":"Kirjutamis\u00fcksuse testid PHPUnitiga, 1. osa: Seadistamine"},"content":{"rendered":"\n<p>Selle kuu alguses hakkasime uurima <strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/phpuniti-installimine-visual-studio-codeis\/\" title=\"PHPUniti installimist Visual Studio Code'i\">PHPUniti installimist Visual Studio Code&#8217;i<\/a><\/strong>, mille l\u00f5ppeesm\u00e4rk oli \u00f5ppida kirjutama oma WordPressi-p\u00f5histe projektide jaoks \u00fchikuteste.<\/p>\n<p>Selleks eeldatakse selles postituses, et olete lugenud j\u00e4rgmisi postitusi, ja eeldatakse, et olete j\u00f5udnud j\u00e4rele m\u00f5nele varasemale postitusele:<\/p>\n<ol>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/wordpressi-arenduskeskkond-kasutades-paketihaldurit\/\" title=\"WordPressi arenduskeskkond (kasutades paketihaldurit)\">WordPressi arenduskeskkond (kasutades paketihaldurit)<\/a><\/strong><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/et\/ide-wordpressi-arendamiseks-olenemata-kogemusest\/\" title=\"IDE WordPressi arendamiseks\">IDE WordPressi arendamiseks<\/a><\/li>\n<li><strong><a href=\"https:\/\/wordpress.mediadoma.com\/et\/visual-studio-codei-kasutajaseadetega-toeoetamine\/\" title=\"Visual Studio Code'i kasutajaseadetega t\u00f6\u00f6tamine\">Visual Studio Code&#8217;i kasutajaseadetega t\u00f6\u00f6tamine<\/a><\/strong><\/li>\n<\/ol>\n<p>Ja muidugi PHPUniti installimine Visual Studio Code&#8217;i, nagu \u00fclal linkitud. Kui see on tehtud, oleme valmis j\u00e4tkama. Kuid \u00fcks asi, mida tuleb meeles pidada, on see, et see \u00f5htu on traditsiooniline v\u00f5i p\u00f5hjalik \u00fchikutestide kirjutamise kursus.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164223-61e760d45682b.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-164223-61e760d45682b.png\" alt=\"Kirjutamis\u00fcksuse testid PHPUnitiga, 1. osa: Seadistamine\"><\/a><\/p>\n<p>Selle asemel on tegemist WordPressi projektide \u00fchikutestide kirjutamisega.<\/p>\n<h2>\u00dchikutestid PHPUnitiga, 1. osa: Seadistamine<\/h2>\n<p>Enne sellesse liiga s\u00fcvenemist tahan teha selgeks, et see pole niiv\u00f5rd postitus testip\u00f5hises arenduses, vaid postitus, mis paneb aluse kirjutamis\u00fchikutestide m\u00f5istmisele. Ja siis l\u00f5puks t\u00f6\u00f6tame selle nimel, et kirjutada oma koodi jaoks \u00fchikutestid.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-164223-61e760d8c4801.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-164223-61e760d8c4801.png\" alt=\"Kirjutamis\u00fcksuse testid PHPUnitiga, 1. osa: Seadistamine\"><\/a><\/p>\n<p>Neile teist, kes on \u00fcksuse testimise kohta varem lugenud, teate, et \u00fchikutestide kirjutamine on teema, mille kohta on palju teavet ja see postitus ei p\u00fc\u00fca seda k\u00f5ike h\u00f5lmata. Selle asemel l\u00e4heneb see WordPressi-p\u00f5histe pistikprogrammide, veebirakenduste ja muude sarnaste testide kirjutamisel pragmaatilisemalt.<\/p>\n<h3>1 Kirjutamis\u00fcksuse testid<\/h3>\n<p>Iga kord, kui asute esimest korda \u00fchikutestide kirjutamisse, tutvustatakse teile nii seadistamise kui ka <strong>rebimise meetodi<\/strong> <strong>ideed<\/strong>. See on <strong><a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPUnitis tavaline<\/a><\/strong> (nagu ka teiste testimisraamistike puhul). Nende kahe konkreetse meetodi puhul on m\u00f5ned asjad, mis sageli probleeme p\u00f5hjustavad.<\/p>\n<p>L\u00fchidalt, inimesed kohtlevad funktsioone j\u00e4rgmiselt:<\/p>\n<ul>\n<li><strong>SetUp<\/strong> on nagu konstruktor, kus loote oma klassi ja seej\u00e4rel valmistate ette k\u00f5ik, mida oma testi jaoks vajate, sealhulgas testitav objekt, vajalikud andmed ja nii edasi.<\/li>\n<li><strong>tearDown<\/strong> on h\u00e4vitaja, kus saate k\u00f5ik l\u00e4htestada ja seej\u00e4rel oma objektid \u00e4ra visata. See on tavaliselt kompileeritud keeltes tavalisem, kuid seda ei tohiks mainimata j\u00e4tta ka PHPUniti puhul.<\/li>\n<\/ul>\n<p>Ja kuigi ma saan sellest t\u00e4iesti aru, pole see alati nii. Ma r\u00e4\u00e4gin ka siin oma kogemusest. Selle asemel tuleb tegelik fraasi\u00fchiku testimine siit. See k\u00f5ik puudutab \u00fcksuste koodikoodi testimist ja seda puhtal ja kokkuv\u00f5tlikul viisil.<\/p>\n<p>Milleks need meetodid siis ikkagi on? See v\u00f5ib olla eriti raske harjumusest lahti saada v\u00f5i isegi kontseptuaalne mudel, millest protsessi esimest korda sisenedes murda. Selleks tahan uurida iga meetodi eesm\u00e4rki ja seej\u00e4rel seda, kuidas sellele WordPressi-p\u00f5histe projektidega t\u00f6\u00f6tades l\u00e4heneda.<\/p>\n<p>Ja nagu tavaliselt, p\u00fc\u00fcan hoida seda v\u00f5imalikult lihtsa ja pragmaatilisena. Mind huvitab palju v\u00e4hem teatud asjade taga olev teooria kui see, kuidas see nii minu \u00e4rile kui ka projektidele h\u00e4sti sobib. (See ei ole muidugi teooria allahindlus, kuid selleks on aeg, mitte koht ja see blogi pole see.)<\/p>\n<h3>2 Seadistusfunktsioon<\/h3>\n<p>Kuigi alustan h\u00e4\u00e4lestusmeetodi l\u00fchikese aruteluga, on oluline meeles pidada, et selle <strong>s\u00f5sarfunktsiooni (nagu m\u00f5ned arvavad) pole alati vaja.<\/strong><\/p>\n<p>N\u00e4iteks kui kirjutate koodi, kus te muudate ainult objekti v\u00f5i objektide komplekti, siis ei pruugi <strong>tearDown meetodit vaja minna.<\/strong> Ma k\u00e4sitlen seda \u00fcksikasjalikumalt j\u00e4rgmises jaotises.<\/p>\n<p>Seda arvestades oletame, et teil on klass, mis vastutab teatud domeeniloogika t\u00e4itmise eest. Pidage meeles, et selle postituse jaoks ei huvita me koodi, mis teeb asju, mida WordPress teeb loomulikult ja millel on juba oma testide komplekt.<\/p>\n<p>Selle all pean silmas, et me oleme mures koodi p\u00e4rast, mis t\u00f6\u00f6tab konkreetselt probleemses valdkonnas. N\u00e4iteks v\u00f5ib-olla oleme huvitatud klassi kirjutamisest, mis salvestab andmed andmebaasi vahem\u00e4llu. \u00dcks teabeosadest, mis vastutab teabe vahem\u00e4llu salvestamise eest, on see, kui kaua andmed peaksid vahem\u00e4lus olema. Seega kasutaks \u00fchikutesti kandidaat seda, et me saame aja m\u00e4\u00e4rata ja muuta, eks?<\/p>\n<p>T\u00f5si, v\u00f5ib-olla on need andmed k\u00f5vasti kodeeritud, kuid n\u00e4iteks oletame teisiti. See t\u00e4hendab j\u00e4rgmist:<\/p>\n<ul>\n<li>Meil on klass, mis toimib meie vahem\u00e4luna,<\/li>\n<li>Klass s\u00e4ilitab eksemplari andmete t\u00fckki, kui kaua vahem\u00e4lu tuleks seadistada,<\/li>\n<li>Vahem\u00e4lu aega saab m\u00e4\u00e4rata kolmandate osapoolte klassidest,<\/li>\n<li>Vahem\u00e4lu aega saab lugeda kolmandate osapoolte klassidest.<\/li>\n<\/ul>\n<p>See t\u00e4hendab, et \u00fchikutest peaks sisaldama:<\/p>\n<ol>\n<li>Klassi seadistamine,<\/li>\n<li>V\u00e4\u00e4rtuse m\u00e4\u00e4ratlemine,<\/li>\n<li>Kinnitades, et defineeritud v\u00e4\u00e4rtus on ootusp\u00e4rane,<\/li>\n<li>V\u00e4\u00e4rtuse muutmine,<\/li>\n<li>Muudetud v\u00e4\u00e4rtuse kinnitamist v\u00e4rskendati.<\/li>\n<\/ol>\n<p>Seega v\u00f5ib p\u00f5hiklass v\u00e4lja n\u00e4ha umbes <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/248c7741273e6be414c1f98c11085fe7#file-00-acme-cache-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/a><\/strong> (kogu dokumentatsioon on klassist v\u00e4lja j\u00e4etud, et kood oleks v\u00f5imalikult l\u00fchike):<\/p>\n<pre><code>&lt;?php\n\nclass AcmeCache\n{\n    private $duration;\n\n    public function __construct()\n    {\n        $this-&gt;duration = 43200;\n    }\n\n    public function setDuration($duration)\n    {\n        $this-&gt;duration = $duration;\n    }\n\n    public function getDuration()\n    {\n        return $this-&gt;duration;\n    }\n\n    \/\/ More cache code omitted...\n}\n<\/code><\/pre>\n<p>Pange t\u00e4hele, et vaikimisi on vahem\u00e4lu aeg 12 tundi (sekundites). Tund toetab nii kestuse muutmise kui ka lugemise v\u00f5imalust.<\/p>\n<p>See t\u00e4hendab, et saame kirjutada teste, mis testivad:<\/p>\n<ul>\n<li>kui algv\u00e4\u00e4rtus on ootusp\u00e4rane,<\/li>\n<li>kui uus v\u00e4\u00e4rtus on ootusp\u00e4rane (ja et see kirjutab algv\u00e4\u00e4rtuse \u00fcle)<\/li>\n<\/ul>\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>\u00dcks asi, millele tahaksin \u00fclaltoodud koodis t\u00e4helepanu juhtida, on see, et v\u00f5ite lugeda, et igal testil peaks olema \u00fcks v\u00e4ide, samas kui <strong>testNewDurationil<\/strong> on selgelt kaks v\u00e4idet.<\/p>\n<p>Kipun v\u00f5tma rusikareeglina ideed \u00fchest v\u00e4itest testi kohta. N\u00e4iteks sel juhul tahan kinnitada, et algv\u00e4\u00e4rtus kirjutatakse \u00fcle v\u00f5i ei salvestata kuhugi ja uus v\u00e4\u00e4rtus salvestatakse.<\/p>\n<p>See ei pruugi aga alati nii olla, seega peate v\u00f5ib-olla seda t\u00fc\u00fcpi olukordi ettevaatlikult k\u00e4sitlema.<\/p>\n<p>Nagu n\u00e4ete, pole sellel WordPressiga mingit pistmist; see on aga seotud konkreetselt antud domeeniga seotud testimisloogikaga. Nimelt vahem\u00e4lu kestus. Ja selles seisnebki \u00fchikutestimise tuum: koodi\u00fchikute loogilise k\u00e4itumise testimine, et veenduda, et asjad toimivad ootusp\u00e4raselt.<\/p>\n<p>Ja s\u00f5ltuvalt sellest, millal selle koodi kirjutate, v\u00f5ivad teil testid eba\u00f5nnestuda. See v\u00f5ib l\u00f5ppkokkuv\u00f5ttes aidata klassi kujundamisel, kuid see on teine \u200b\u200bteema, mitte selle postituse osa.<\/p>\n<h2>Testide k\u00e4ivitamine<\/h2>\n<p>Kui testid on kirjutatud, on oluline osata neid t\u00e4ita, et n\u00e4ha, kas need l\u00e4bivad, kui eba\u00f5nnestuvad, mis l\u00e4bib ja mis mitte. Kuid me pole veel l\u00f5petanud. Soovin anda p\u00f5hjaliku \u00fclevaate \u00fcksuste testimisest WordPressi kontekstis. See tuleneb sellest, mida WordPress pakub, mida mitte, m\u00f5ningaid v\u00e4\u00e4rarusaamu ja kuidas neid teste terminalis v\u00f5i Visual Studio Code&#8217;is k\u00e4ivitada.<\/p>\n<p>Selle seeria j\u00e4rgmises postituses vaatleme <strong>tearDowni<\/strong> funktsiooni ja seda, kuidas (ja millal) seda kasutada, millal seda vaja on, millal mitte, ja seej\u00e4rel vaatame veidi \u00fchikut. testimine WordPressis \u00fcldiselt.<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes t\u00f6\u00f6tame selle nimel, et saada t\u00e4ielik \u00fclevaade sellest, kuidas seda teha ja kuidas seda \u00f5igesti teha. Kuid oluline on sellele alus panna ja seda on m\u00f5ne posti ulatuses lihtsam teha kui \u00fches monoliitses postis.<\/p>\n<p>Seega on selle sarja j\u00e4rgmise postituse teemaks <strong>tearDown()<\/strong>, selle kasutamise ja k\u00e4surealt testide sooritamise uurimine.<\/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>Juhend PHPUniti testide kirjutamise alustamiseks, kasutades p\u00f5hivahem\u00e4lu ja kasutades raamistiku h\u00e4\u00e4lestusmeetodit.<\/p>\n","protected":false},"author":1,"featured_media":164224,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,842,802],"tags":[1165],"class_list":["post-229889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-opetused","category-php-4","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=229889"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/229889\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/164224"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=229889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=229889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=229889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}