Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【最終回】Drupal モジュール開発入門講座 第10回 自動テスト

【最終回】Drupal モジュール開発入門講座 第10回 自動テスト

More Decks by アクイアジャパン Acquia Japan

Other Decks in Programming

Transcript

  1. ୈ10ճ ࣗಈςετ
    Drupal Ϟδϡʔϧ


    ։ൃೖ໳ߨ࠲

    View Slide

  2. Drupal Ϟδϡʔϧ։ൃೖ໳ߨ࠲γϦʔζ
    – DrupalͰ͸ʮϞδϡʔϧʯͱݺ͹ΕΔɺখ͞ͳιϑτ΢ΣΞΛ࣮૷͢Δ͜ͱͰػೳ֦ுΛߦ
    ͍·͢ɻຊ΢ΣϏφʔγϦʔζͰ͸ɺDrupalͷϞδϡʔϧ։ൃʹؔ͢Δجૅ஌ࣝΛղઆ͠·
    ͢ɻ


    – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗ෼ͰΧελϜϞδϡʔϧΛ࡞Ε
    ΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛ໨ࢦ͢ํʹ͓͢͢ΊͰ͢ɻ


    – DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛର৅ͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ͍
    ํ͸ɺॳ৺ऀ޲͚DrupalνϡʔτϦΞϧಈըʢ೔ຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ·Γ
    ·͢ɻ

    View Slide

  3. ΞδΣϯμ
    1. Drupalͷࣗಈςετͱ͸


    2. PHPUnitͷಋೖํ๏


    3. ςετͷ࣮ߦํ๏


    4. ςετͷॻ͖ํ


    5. ࿅श໰୊

    View Slide

  4. Drupalͷࣗಈςετͱ͸

    View Slide

  5. ιϑτ΢ΣΞͷςετ
    ιϑτ΢ΣΞςετ (ӳ: software testing) ͸ɺίϯϐϡʔλͷϓ
    ϩάϥϜ͔Β࢓༷ʹͳ͍ৼ෣·ͨ͸ܽؕʢόάʣΛݟ͚ͭग़͢
    ࡞ۀͷ͜ͱͰ͋Δ
    https://ja.wikipedia.org/wiki/ιϑτ΢ΣΞςετ
    - Wikipedia

    View Slide

  6. Ұൠతͳιϑτ΢ΣΞςετͷςετϨϕϧ
    – ୯ମςετɿϓϩάϥϜͷߏ੒ཁૉͰ͋ΔΫϥε΍ؔ਺ͳͲͷ୯ҐͰಈ࡞Λ
    ֬ೝ͢ΔͨΊͷςετɻϢχοτςετɺίϯϙʔωϯτςετͱ΋ݺ͹Ε
    Δɻ


    – ౷߹ςετɿݸʑͷιϑτ΢ΣΞϞδϡʔϧΛ૊Έ߹Θͤͯू߹ମͱͯ͠ಈ
    ࡞Λ֬ೝ͢ΔͨΊͷςετɻ݁߹ςετͱ΋ݺ͹ΕΔɻ


    – γεςϜςετɿΞϓϦέʔγϣϯશମ·ͨ͸γεςϜશମͷಈ࡞ΛΤϯυ
    πʔΤϯυͰਫ਼ࠪ͢ΔͨΊͷςετɻE2Eςετͱ΋ݺ͹ΕΔɻ


    – डೖςετɿಛఆͷ੡඼·ͨ͸ػೳ͕ɺސ٬·ͨ͸੡඼ϚωʔδϟʔͳͲͷ
    ಺෦ར֐ؔ܎ऀʹΑͬͯઃఆ͞Εͨ࢓༷ʹैͬͯ։ൃ͞Εͨ͜ͱΛ֬ೝ͢Δ
    ͨΊͷςετɻ
    खಈͰςετ͢Δ
    ͷ͸େมɾɾͦ͜
    ͰࣗಈԽʂ
    https://en.wikipedia.org/wiki/Software_testing#Testing_levels

    View Slide

  7. Drupalͷࣗಈςετ
    – ػೳ௥ՃɺվमɺDrupalΞοϓσʔτͰίʔυʹมߋ͕͋ͬͨࡍʹɺࣗಈς
    ετΛ௨ͯ͡ιϑτ΢ΣΞͷৼΔ෣͍ΛݕࠪͰ͖·͢ɻ


    – DrupalͰ͸ɺPHPUnitͱ͍͏ςετϑϨʔϜϫʔΫΛαϙʔτ͍ͯ͠·͢ɻ
    ͜ΕʹΑͬͯPHPϕʔεͷςετΛࣗಈԽͰ͖·͢ɻ


    – PHPUnitͰ͸ςετͷ࣮ߦɺςετ݁Ռͷग़ྗɺίʔυΧόϨοδղੳͳͲ
    ͕Ͱ͖·͢ɻ


    – CI/CDπʔϧͱ૊Έ߹ΘͤΔ͜ͱͰɺίʔυมߋΛߦ͏౓ʹࣗಈతʹςετ
    ࣮ߦΛߦ͏͜ͱ͕Ͱ͖·͢ɻ

    View Slide

  8. DrupalͷςετεΠʔτ
    ςετͷ໨తʹԠͯ͡5छྨͷςετεΠʔτ͕༻ҙ͞Ε͍ͯ·͢ɻ͜ΕΒ͸
    PHPUnitϕʔεʹهड़͞Ε͍ͯ·͢ɻ


    – UnitɿDB΍ߏ੒σʔλΛ࢖Θͣ(ϞοΫͰରԠՄೳ)ɺΫϥε΍ؔ਺୯Ґ
    ͰςετΛߦ͏ɻ


    – KernelɿDB΍ߏ੒σʔλΛ࢖͏͕Webϒϥ΢β͸ෆཁͳςετΛߦ͏ɻ


    – FunctionalɿWebϒϥ΢βΛ࢖༻ͨ͠ςετΛߦ͏ɻ


    – FunctionalJavaScriptɿWebϒϥ΢βͱJavaScriptΛ࢖༻ͨ͠ςετΛߦ
    ͏ɻ


    – BuildɿϏϧυϓϩηεͱͦͷ݁Ռʹରͯ͠ςετΛߦ͏ɻ
    https://api.drupal.org/api/drupal/core%21core.api.php/group/testing/9
    ୯ମςετɺ౷߹
    ςετɺγεςϜ
    ςετΛΧόʔ

    View Slide

  9. Drupalͷࣗಈςετͱ͸ ·ͱΊ
    – ιϑτ΢ΣΞΛςετ͢Δ্Ͱɺࣗಈςετ͕͋Δ͜ͱʹΑͬͯػೳ
    ௥ՃɺվमɺDrupalΞοϓσʔτͰίʔυʹมߋ͕͋Δ౓ʹιϑτ
    ΢ΣΞͷৼΔ෣͍ΛݕࠪͰ͖·͢ɻ


    – DrupalͰ͸ɺPHPUnitͱ͍͏ςετϑϨʔϜϫʔΫΛαϙʔτ͓ͯ͠
    ΓɺPHPϕʔεͷςετΛࣗಈԽͰ͖·͢ɻ


    – Drupalʹ͸ςετͷ໨తʹԠͯ͡5छྨͷςετεΠʔτ͕༻ҙ͞Εͯ
    ͓Γɺ୯ମςετɺ౷߹ςετɺγεςϜ/ػೳςετͷ࣮ࢪΛαϙʔ
    τ͍ͯ͠·͢ɻ

    View Slide

  10. PHPUnitͷಋೖํ๏

    View Slide

  11. – PHPUnit͸drupal/core-devύοέʔδʹؚ·Ε͍ͯΔͷͰɺcomposerίϚϯυͰΠϯετʔϧ
    ͠·͢ɻ

    $ composer require drupal/core-dev --dev --update-with-all-dependencies






    – PHPUnit͕ΠϯετʔϧͰ͖ͨΒɺphpunitίϚϯυ͕࢖͑ΔΑ͏ʹͳΓ·͢ɻ

    $ ./vendor/bin/phpunit --version
    PHPUnitͷΠϯετʔϧ
    ※1 PHPUnitΛ࢖༻͢Δʹ͸Composer͕ඞཁͰ͢ɻ


    ※2 --devΦϓγϣϯΛ෇͚ͯΠϯετʔϧ͠·͢ɻ


    ※3 DrupalϓϩδΣΫτ͕࠷৽Ͱͳ͍৔߹͸ɺ࢖༻͍ͯ͠ΔDrupalόʔδϣϯΛࢦఆͯ͠Πϯ
    ετʔϧ͠·͢ɻྫɿ ‘drupal/core-dev:^9.4’

    View Slide

  12. PHPUnitͷઃఆϑΝΠϧΛ༻ҙ͢Δ
    – phpunit.xml (΋͘͠͸phpunit.xml.dist)ͱ͍͏ϑΝΠϧΛɺϓϩδΣΫτσΟϨΫτϦ
    ௚Լʹ഑ஔ͠·͢ɻ/web/core/phpunit.xml.dist Λίϐʔͯ࣋ͬͯ͘͠ΔͱָͰ͢ɻ

    $ cp web/core/phpunit.xml.dist phpunit.xml

    – ϑΝΠϧͷத਎Λ͍͔ͭ͘मਖ਼͠·͢ɻ


    – bootstrapͷ஋ɿύεΛमਖ਼͢Δ


    – SIMPLETEST_DBͷ஋ɿKernelςετ΍FunctionalςετͰඞཁ


    – SIMPLETEST_BASE_URLͷ஋ɿFunctionalςετͰඞཁ


    – ͦͷଞɿద੾Ͱͳ͍ύεΛमਖ਼͢Δ

    View Slide

  13. ઃఆϑΝΠϧͷมߋՕॴྫ
    https://github.com/hmaruyama/my-drupal9-
    module/commit/044fabfd2475

    View Slide

  14. ࢀߟ) LandoͰDrupal؀ڥΛ༻ҙ͍ͯ͠Δ৔߹
    – LandoͷDrupalϨγϐΛ࢖༻ͯ͠Drupal؀ڥΛ༻ҙ͍ͯ͠Δ৔߹͸ɺ࣍ͷίϚϯυ
    ͰphpunitίϚϯυΛ࣮ߦͰ͖·͢ɻ

    $ lando php /app/vendor/bin/phpunit --version

    – ·ͨ͸ɺ.lando.ymlʹ






    ͷΑ͏ʹઃఆ͢Δ͜ͱͰɺಠࣗͷίϚϯυΛఏڙͰ͖·͢ɻ

    $ lando phpunit --version
    tooling:


    phpunit:


    service: appserver


    cmd:


    - appserver: php /app/vendor/bin/phpunit -c /app/phpunit.xml

    View Slide

  15. ςετͷ࣮ߦํ๏

    View Slide

  16. ςετΛ࣮ߦ͢Δ
    – ςετͷ࣮ߦ͸phpunitίϚϯυͰߦ͏͜ͱ͕Ͱ͖·͢ɻ


    $ ./vendor/bin/phpunit -c {ઃఆϑΝΠϧ} {ର৅ͷςετϑΝΠϧ/σΟϨΫ
    τϦ}

    View Slide

  17. – DrupalίΞΛؚΉશͯͷςετΛ࣮ߦ

    $ ./vendor/bin/phpunit -c phpunit.xml

    – ಛఆͷσΟϨΫτϦ಺ͷςετΛ࣮ߦ

    $ ./vendor/bin/phpunit -c phpunit.xml web/core/modules/system/tests/src/Kernel

    – ಛఆͷςετϑΝΠϧ಺ͷςετΛ࣮ߦ

    $ ./vendor/bin/phpunit -c phpunit.xml web/core/modules/system/tests/src/Unit/
    Breadcrumbs/PathBasedBreadcrumbBuilderTest.php
    ͞·͟·ͳ࣮ߦํ๏

    View Slide

  18. – ಛఆͷςετεΠʔτͷςετΛ࣮ߦ͢Δ

    $ ./vendor/bin/phpunit -c phpunit.xml --testsuite unit

    – ಛఆͷάϧʔϓͷςετΛ࣮ߦ͢Δ

    $ ./vendor/bin/phpunit -c phpunit.xml --group views

    – ςετର৅ͷҰཡΛग़ྗ͢Δ


    $ ./vendor/bin/phpunit -c phpunit.xml --list-tests
    ͞·͟·ͳ࣮ߦํ๏

    View Slide

  19. DrupalίΞʹଘࡏ͢Δ͞·͟·ͳςετΛ࣮ߦͯ͠ΈΑ͏ʂ


    1. ಛఆͷσΟϨΫτϦ಺ͷςετ


    2. ಛఆͷςετεΠʔτͷςετ


    3. ͳͲ
    ԋश

    View Slide

  20. ςετͷॻ͖ํ

    View Slide

  21. ΧελϜϞδϡʔϧͷςετΛॻ͍ͯΈΑ͏ʂ
    – DrupalίΞͰߦΘΕ͍ͯΔΑ͏ʹɺΧελϜϞδϡʔϧͰ΋ςε
    τίʔυΛ഑ஔ͠ɺࣗಈςετΛ࣮ࢪ͢Δ͜ͱ͕Ͱ͖·͢ɻ


    – ςετίʔυͷॻ͖ํ͸جຊతʹPHPUnitͷ࢓༷ʹج͖ͮ·͢ɻ

    View Slide

  22. ςετϑΝΠϧ࡞੒ʹؔ͢Δϧʔϧ
    – ςετϑΝΠϧ͸

    {yourmodule}/tests/src/{testsuite}/xxTest.php

    ͷ໋໊نଇʹै͍·͢ɻ

    ྫɿmarucha/tests/src/Unit/Controller/MaruchaControllerTest.php


    – ςετΫϥεͷ໊લۭؒ͸࣍ͷΑ͏ʹͳΓ·͢ɻ

    Drupal\Tests\{yourmodule}\{testsuite}\xxTest

    ྫɿDrupal\Tests\marucha\Unit\Controller\MaruchaControllerTest


    – ςετΫϥε͸࢖༻͢ΔςετεΠʔτ͕༻ҙ͢ΔجఈΫϥεΛ֦ு͠·͢ɻ


    – ςετϝιου͸ɺtest͔Β࢝·Δpublicϝιουʹهड़͠·͢ɻ


    – docblockͰςετʹؔ͢Δ৘ใΛదٓهࡌ͠·͢ɻ

    View Slide

  23. DrupalͷςετεΠʔτ
    ΧςΰϦ ໨త جఈΫϥε σΟϨΫτϦ
    Unit
    DB΍ߏ੒σʔλΛ࢖Θͣ(Ϟο
    ΫͰରԠՄೳ)ɺΫϥε΍ؔ਺୯
    ҐͰςετΛߦ͏ɻ
    \Drupal\Tests\UnitTestCase yourmodule/tests/src/Unit/
    Kernel DB΍ߏ੒σʔλΛ࢖͏͕Webϒ
    ϥ΢β͸ෆཁͳςετΛߦ͏ɻ
    \Drupal\KernelTests\KernelTestBase yourmodule/tests/src/Kernel/
    Functional Webϒϥ΢βΛ࢖༻ͨ͠ςετ
    Λߦ͏ɻ
    \Drupal\Tests\BrowserTestBase yourmodule/tests/src/Functional/
    FunctionalJavaScript
    Webϒϥ΢βͱJavaScriptΛ࢖
    ༻ͨ͠ςετΛߦ͏ɻ
    \Drupal\FunctinalJavaScriptTests\We
    bDriverTestBase
    yourmodule/tests/src/
    FunctionalJavaScript/
    Build Ϗϧυϓϩηεͱͦͷ݁Ռʹର
    ͯ͠ςετΛߦ͏ɻ
    \Drupal\BuildTests\Framework\BuildT
    estBase
    yourmodule/tests/src/Build/
    https://api.drupal.org/api/drupal/core%21core.api.php/group/testing/9

    View Slide

  24. ԋश
    ΧελϜϞδϡʔϧͰςετίʔυ(Unitςετ)Λॻ͍ͯΈΑ͏ʂ


    1. ϞδϡʔϧσΟϨΫτϦʹ tests/src/Unit/Controller/
    MaruchaController.php ϑΝΠϧΛ࡞੒͢Δ


    2. ςετΛ࣮ߦࣦͯ͠ഊ͢Δ͜ͱΛ֬ೝ͢Δ


    3. ςετ͕௨ΔΑ͏ʹ࣮૷͢Δ
    ίʔυ͸ͪ͜Β→ https://github.com/hmaruyama/my-drupal9-module/compare/vol10

    View Slide

  25. ࿅श໰୊

    View Slide

  26. ࿅श໰୊1
    Drupalͷࣗಈςετ͸ɺ࣍ͷͲͷςετϑϨʔϜϫʔΫ͕࢖༻͞Ε͍ͯ·͢
    ͔ʁ


    1. RSpec


    2. PHPSpec


    3. PHPUnit


    4. Twig

    View Slide

  27. ࿅श໰୊1
    Drupalͷࣗಈςετ͸ɺ࣍ͷͲͷςετϑϨʔϜϫʔΫ͕࢖༻͞Ε͍ͯ·͢
    ͔ʁ


    1. RSpec


    2. PHPSpec


    3. PHPUnit


    4. Twig

    View Slide

  28. ࿅श໰୊2
    DrupalͰ༻ҙ͞Ε͍ͯΔPHPUnitϕʔεͷςετεΠʔτ͸ͲΕͰ͔͢ʁʢ3ͭબ
    ୒͍ͯͩ͘͠͞ɻʣ


    1. Kernel


    2. Deploy


    3. Build


    4. Application


    5. Unit

    View Slide

  29. ࿅श໰୊2
    DrupalͰ༻ҙ͞Ε͍ͯΔPHPUnitϕʔεͷςετεΠʔτ͸ͲΕͰ͔͢ʁʢ3ͭ
    બ୒͍ͯͩ͘͠͞ɻʣ


    1. Kernel


    2. Deploy


    3. Build


    4. Application


    5. Unit

    View Slide

  30. ࿅श໰୊3
    ςετΫϥε(marucha/tests/src/Functional/Form\MaruchaForm.php)ͷ໊લۭؒͱ
    ͯ͠ਖ਼͍͠΋ͷΛબ୒͍ͯͩ͘͠͞ɻ


    1. \Drupal\marucha\Tests\Functional\Form\MaruchaForm


    2. \Drupal\Tests\marucha\Functional\Form\MaruchaForm


    3. \Drupal\marucha\Test\Functional\Form\MaruchaForm


    4. \Drupal\Test\marucha\Functional\Form\MaruchaForm

    View Slide

  31. ࿅श໰୊3
    ςετΫϥε(marucha/tests/src/Functional/Form\MaruchaForm.php)ͷ໊લۭؒͱ
    ͯ͠ਖ਼͍͠΋ͷΛબ୒͍ͯͩ͘͠͞ɻ


    1. \Drupal\marucha\Tests\Functional\Form\MaruchaForm


    2. \Drupal\Tests\marucha\Functional\Form\MaruchaForm


    3. \Drupal\marucha\Test\Functional\Form\MaruchaForm


    4. \Drupal\Test\marucha\Functional\Form\MaruchaForm

    View Slide

  32. ຊ೔ͷΞδΣϯμ͸ऴྃ

    View Slide

  33. ΞδΣϯμ
    1. Drupalͷࣗಈςετͱ͸


    2. PHPUnitͷಋೖํ๏


    3. ςετͷ࣮ߦํ๏


    4. ςετͷॻ͖ํ


    5. ࿅श໰୊

    View Slide

  34. Drupal Ϟδϡʔϧ։ൃೖ໳ߨ࠲γϦʔζ
    1. Ϟδϡʔϧͷجૅ஌ࣝ


    2. γϯϓϧͳΧελϜϞδϡʔϧΛ࡞ͬͯΈΑ͏


    3. ϑοΫ


    4. ϑΥʔϜ


    5. αʔϏε


    6. Πϕϯτ


    7. ϓϥάΠϯ


    8. ΤϯςΟςΟ


    9. ߏ੒


    10. ࣗಈςετ
    https://www.youtube.com/playlist?list=PLVkpj3GMKNm2n_u-gOCBhDtqXTDxwhqjM

    View Slide

  35. – Ξϯέʔτͷ͝ڠྗΑΖ͓͘͠ئ͍͠·͢ʂ

    ʢ΢ΣϏφʔऴྃޙʹURL͕ڞ༗͞Ε·͢ʣ


    – ࣍ճͷ์ૹ͸ͪ͜Β

    3/1(ਫ) ΞΫΠΞೝఆCloud Platform Proͬͯ

    ͲΜͳࢼݧʁపఈղઆ΢ΣϏφʔ


    https://www.acquia.com/jp/events/webinars/acquia-certified-cloud-platform-pro-introduction
    ࠷ޙʹ

    View Slide

  36. View Slide