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. Ұൠతͳιϑτ΢ΣΞςετͷςετϨϕϧ – ୯ମςετɿϓϩάϥϜͷߏ੒ཁૉͰ͋ΔΫϥε΍ؔ਺ͳͲͷ୯ҐͰಈ࡞Λ ֬ೝ͢ΔͨΊͷςετɻϢχοτςετɺίϯϙʔωϯτςετͱ΋ݺ͹Ε Δɻ – ౷߹ςετɿݸʑͷιϑτ΢ΣΞϞδϡʔϧΛ૊Έ߹Θͤͯू߹ମͱͯ͠ಈ ࡞Λ֬ೝ͢ΔͨΊͷςετɻ݁߹ςετͱ΋ݺ͹ΕΔɻ – γεςϜςετɿΞϓϦέʔγϣϯશମ·ͨ͸γεςϜશମͷಈ࡞ΛΤϯυ

    πʔΤϯυͰਫ਼ࠪ͢ΔͨΊͷςετɻE2Eςετͱ΋ݺ͹ΕΔɻ – डೖςετɿಛఆͷ੡඼·ͨ͸ػೳ͕ɺސ٬·ͨ͸੡඼ϚωʔδϟʔͳͲͷ ಺෦ར֐ؔ܎ऀʹΑͬͯઃఆ͞Εͨ࢓༷ʹैͬͯ։ൃ͞Εͨ͜ͱΛ֬ೝ͢Δ ͨΊͷςετɻ खಈͰςετ͢Δ ͷ͸େมɾɾͦ͜ ͰࣗಈԽʂ https://en.wikipedia.org/wiki/Software_testing#Testing_levels
  2. 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 ୯ମςετɺ౷߹ ςετɺγεςϜ ςετΛΧόʔ
  3. – 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’
  4. 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ςετͰඞཁ – ͦͷଞɿద੾Ͱͳ͍ύεΛमਖ਼͢Δ
  5. ࢀߟ) 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
  6. – 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 ͞·͟·ͳ࣮ߦํ๏
  7. – ಛఆͷςετεΠʔτͷςετΛ࣮ߦ͢Δ 
 $ ./vendor/bin/phpunit -c phpunit.xml --testsuite unit 


    – ಛఆͷάϧʔϓͷςετΛ࣮ߦ͢Δ 
 $ ./vendor/bin/phpunit -c phpunit.xml --group views 
 – ςετର৅ͷҰཡΛग़ྗ͢Δ $ ./vendor/bin/phpunit -c phpunit.xml --list-tests ͞·͟·ͳ࣮ߦํ๏
  8. ςετϑΝΠϧ࡞੒ʹؔ͢Δϧʔϧ – ςετϑΝΠϧ͸ 
 {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Ͱςετʹؔ͢Δ৘ใΛదٓهࡌ͠·͢ɻ
  9. 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
  10. Drupal Ϟδϡʔϧ։ൃೖ໳ߨ࠲γϦʔζ 1. Ϟδϡʔϧͷجૅ஌ࣝ 2. γϯϓϧͳΧελϜϞδϡʔϧΛ࡞ͬͯΈΑ͏ 3. ϑοΫ 4. ϑΥʔϜ

    5. αʔϏε 6. Πϕϯτ 7. ϓϥάΠϯ 8. ΤϯςΟςΟ 9. ߏ੒ 10. ࣗಈςετ https://www.youtube.com/playlist?list=PLVkpj3GMKNm2n_u-gOCBhDtqXTDxwhqjM
  11. – Ξϯέʔτͷ͝ڠྗΑΖ͓͘͠ئ͍͠·͢ʂ 
 ʢ΢ΣϏφʔऴྃޙʹURL͕ڞ༗͞Ε·͢ʣ – ࣍ճͷ์ૹ͸ͪ͜Β 
 3/1(ਫ) ΞΫΠΞೝఆCloud Platform

    Proͬͯ 
 ͲΜͳࢼݧʁపఈղઆ΢ΣϏφʔ https://www.acquia.com/jp/events/webinars/acquia-certified-cloud-platform-pro-introduction ࠷ޙʹ