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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

【最終回】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 ࠷ޙʹ