Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【最終回】Drupal モジュール開発入門講座 第10回 自動テスト
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
アクイアジャパン Acquia Japan
February 08, 2023
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【最終回】Drupal モジュール開発入門講座 第10回 自動テスト
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol10
アクイアジャパン Acquia Japan
February 08, 2023
More Decks by アクイアジャパン Acquia Japan
See All by アクイアジャパン Acquia Japan
Auth0 by OktaとDrupalで実践!認証付きアプリケーションの新しいアプローチ
acquiajp
0
230
Drupal 10.3の新機能紹介ウェビナー
acquiajp
0
270
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
130
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
230
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
56
DrupalCon Lille 2023 総まとめウェビナー
acquiajp
0
100
コンテンツ設計手法で変更に強いアプリケーションを実現する〜ローコードによるWebアプリのバックエンド実装 #CNDF2023
acquiajp
0
410
DrupalCon Pittsburgh 2023 総まとめウェビナー
acquiajp
0
110
Acquia製品概要&Site Studioデモのご紹介
acquiajp
0
140
Other Decks in Programming
See All in Programming
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
750
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.8k
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.1k
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
200
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
210
AIが無かった頃の素敵な出会いの話
codmoninc
1
370
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
140
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
540
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.4k
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
180
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
570
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
510
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
Prompt Engineering for Job Search
mfonobong
0
390
Writing Fast Ruby
sferik
630
63k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
230
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
Transcript
ୈ10ճ ࣗಈςετ Drupal Ϟδϡʔϧ ։ൃೖߨ࠲
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛߦ ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ͠· ͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞Ε ΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ͍ ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ·Γ ·͢ɻ
ΞδΣϯμ 1. Drupalͷࣗಈςετͱ 2. PHPUnitͷಋೖํ๏ 3. ςετͷ࣮ߦํ๏ 4. ςετͷॻ͖ํ 5.
࿅श
Drupalͷࣗಈςετͱ
ιϑτΣΞͷςετ ιϑτΣΞςετ (ӳ: software testing) ɺίϯϐϡʔλͷϓ ϩάϥϜ͔Β༷ʹͳ͍ৼ·ͨܽؕʢόάʣΛݟ͚ͭग़͢ ࡞ۀͷ͜ͱͰ͋Δ https://ja.wikipedia.org/wiki/ιϑτΣΞςετ -
Wikipedia
ҰൠతͳιϑτΣΞςετͷςετϨϕϧ – ୯ମςετɿϓϩάϥϜͷߏཁૉͰ͋ΔΫϥεؔͳͲͷ୯ҐͰಈ࡞Λ ֬ೝ͢ΔͨΊͷςετɻϢχοτςετɺίϯϙʔωϯτςετͱݺΕ Δɻ – ౷߹ςετɿݸʑͷιϑτΣΞϞδϡʔϧΛΈ߹Θͤͯू߹ମͱͯ͠ಈ ࡞Λ֬ೝ͢ΔͨΊͷςετɻ݁߹ςετͱݺΕΔɻ – γεςϜςετɿΞϓϦέʔγϣϯશମ·ͨγεςϜશମͷಈ࡞ΛΤϯυ
πʔΤϯυͰਫ਼ࠪ͢ΔͨΊͷςετɻE2EςετͱݺΕΔɻ – डೖςετɿಛఆͷ·ͨػೳ͕ɺސ٬·ͨϚωʔδϟʔͳͲͷ ෦རؔऀʹΑͬͯઃఆ͞Ε༷ͨʹैͬͯ։ൃ͞Εͨ͜ͱΛ֬ೝ͢Δ ͨΊͷςετɻ खಈͰςετ͢Δ ͷେมɾɾͦ͜ ͰࣗಈԽʂ https://en.wikipedia.org/wiki/Software_testing#Testing_levels
Drupalͷࣗಈςετ – ػೳՃɺվमɺDrupalΞοϓσʔτͰίʔυʹมߋ͕͋ͬͨࡍʹɺࣗಈς ετΛ௨ͯ͡ιϑτΣΞͷৼΔ͍ΛݕࠪͰ͖·͢ɻ – DrupalͰɺPHPUnitͱ͍͏ςετϑϨʔϜϫʔΫΛαϙʔτ͍ͯ͠·͢ɻ ͜ΕʹΑͬͯPHPϕʔεͷςετΛࣗಈԽͰ͖·͢ɻ – PHPUnitͰςετͷ࣮ߦɺςετ݁Ռͷग़ྗɺίʔυΧόϨοδղੳͳͲ ͕Ͱ͖·͢ɻ
– CI/CDπʔϧͱΈ߹ΘͤΔ͜ͱͰɺίʔυมߋΛߦ͏ʹࣗಈతʹςετ ࣮ߦΛߦ͏͜ͱ͕Ͱ͖·͢ɻ
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 ୯ମςετɺ౷߹ ςετɺγεςϜ ςετΛΧόʔ
Drupalͷࣗಈςετͱ ·ͱΊ – ιϑτΣΞΛςετ͢Δ্Ͱɺࣗಈςετ͕͋Δ͜ͱʹΑͬͯػೳ ՃɺվमɺDrupalΞοϓσʔτͰίʔυʹมߋ͕͋Δʹιϑτ ΣΞͷৼΔ͍ΛݕࠪͰ͖·͢ɻ – DrupalͰɺPHPUnitͱ͍͏ςετϑϨʔϜϫʔΫΛαϙʔτ͓ͯ͠ ΓɺPHPϕʔεͷςετΛࣗಈԽͰ͖·͢ɻ –
DrupalʹςετͷతʹԠͯ͡5छྨͷςετεΠʔτ͕༻ҙ͞Εͯ ͓Γɺ୯ମςετɺ౷߹ςετɺγεςϜ/ػೳςετͷ࣮ࢪΛαϙʔ τ͍ͯ͠·͢ɻ
PHPUnitͷಋೖํ๏
– PHPUnitdrupal/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’
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ςετͰඞཁ – ͦͷଞɿదͰͳ͍ύεΛमਖ਼͢Δ
ઃఆϑΝΠϧͷมߋՕॴྫ https://github.com/hmaruyama/my-drupal9- module/commit/044fabfd2475
ࢀߟ) 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
ςετͷ࣮ߦํ๏
ςετΛ࣮ߦ͢Δ – ςετͷ࣮ߦphpunitίϚϯυͰߦ͏͜ͱ͕Ͱ͖·͢ɻ $ ./vendor/bin/phpunit -c {ઃఆϑΝΠϧ} {ରͷςετϑΝΠϧ/σΟϨΫ
τϦ}
– 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 ͞·͟·ͳ࣮ߦํ๏
– ಛఆͷςετεΠʔτͷςετΛ࣮ߦ͢Δ $ ./vendor/bin/phpunit -c phpunit.xml --testsuite unit
– ಛఆͷάϧʔϓͷςετΛ࣮ߦ͢Δ $ ./vendor/bin/phpunit -c phpunit.xml --group views – ςετରͷҰཡΛग़ྗ͢Δ $ ./vendor/bin/phpunit -c phpunit.xml --list-tests ͞·͟·ͳ࣮ߦํ๏
DrupalίΞʹଘࡏ͢Δ͞·͟·ͳςετΛ࣮ߦͯ͠ΈΑ͏ʂ 1. ಛఆͷσΟϨΫτϦͷςετ 2. ಛఆͷςετεΠʔτͷςετ 3. ͳͲ ԋश
ςετͷॻ͖ํ
ΧελϜϞδϡʔϧͷςετΛॻ͍ͯΈΑ͏ʂ – DrupalίΞͰߦΘΕ͍ͯΔΑ͏ʹɺΧελϜϞδϡʔϧͰςε τίʔυΛஔ͠ɺࣗಈςετΛ࣮ࢪ͢Δ͜ͱ͕Ͱ͖·͢ɻ – ςετίʔυͷॻ͖ํجຊతʹPHPUnitͷ༷ʹج͖ͮ·͢ɻ
ςετϑΝΠϧ࡞ʹؔ͢Δϧʔϧ – ςετϑΝΠϧ {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Ͱςετʹؔ͢ΔใΛదٓهࡌ͠·͢ɻ
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
ԋश ΧελϜϞδϡʔϧͰςετίʔυ(Unitςετ)Λॻ͍ͯΈΑ͏ʂ 1. ϞδϡʔϧσΟϨΫτϦʹ tests/src/Unit/Controller/ MaruchaController.php ϑΝΠϧΛ࡞͢Δ 2. ςετΛ࣮ߦࣦͯ͠ഊ͢Δ͜ͱΛ֬ೝ͢Δ 3.
ςετ͕௨ΔΑ͏ʹ࣮͢Δ ίʔυͪ͜Β→ https://github.com/hmaruyama/my-drupal9-module/compare/vol10
࿅श
࿅श1 Drupalͷࣗಈςετɺ࣍ͷͲͷςετϑϨʔϜϫʔΫ͕༻͞Ε͍ͯ·͢ ͔ʁ 1. RSpec 2. PHPSpec 3. PHPUnit 4.
Twig
࿅श1 Drupalͷࣗಈςετɺ࣍ͷͲͷςετϑϨʔϜϫʔΫ͕༻͞Ε͍ͯ·͢ ͔ʁ 1. RSpec 2. PHPSpec 3. PHPUnit 4.
Twig
࿅श2 DrupalͰ༻ҙ͞Ε͍ͯΔPHPUnitϕʔεͷςετεΠʔτͲΕͰ͔͢ʁʢ3ͭબ ͍ͯͩ͘͠͞ɻʣ 1. Kernel 2. Deploy 3. Build 4.
Application 5. Unit
࿅श2 DrupalͰ༻ҙ͞Ε͍ͯΔPHPUnitϕʔεͷςετεΠʔτͲΕͰ͔͢ʁʢ3ͭ બ͍ͯͩ͘͠͞ɻʣ 1. Kernel 2. Deploy 3. Build 4.
Application 5. Unit
࿅श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
࿅श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
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. Drupalͷࣗಈςετͱ 2. PHPUnitͷಋೖํ๏ 3. ςετͷ࣮ߦํ๏ 4. ςετͷॻ͖ํ 5.
࿅श
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ 1. Ϟδϡʔϧͷجૅࣝ 2. γϯϓϧͳΧελϜϞδϡʔϧΛ࡞ͬͯΈΑ͏ 3. ϑοΫ 4. ϑΥʔϜ
5. αʔϏε 6. Πϕϯτ 7. ϓϥάΠϯ 8. ΤϯςΟςΟ 9. ߏ 10. ࣗಈςετ https://www.youtube.com/playlist?list=PLVkpj3GMKNm2n_u-gOCBhDtqXTDxwhqjM
– Ξϯέʔτͷ͝ڠྗΑΖ͓͘͠ئ͍͠·͢ʂ ʢΣϏφʔऴྃޙʹURL͕ڞ༗͞Ε·͢ʣ – ࣍ճͷ์ૹͪ͜Β 3/1(ਫ) ΞΫΠΞೝఆCloud Platform
Proͬͯ ͲΜͳࢼݧʁపఈղઆΣϏφʔ https://www.acquia.com/jp/events/webinars/acquia-certified-cloud-platform-pro-introduction ࠷ޙʹ
None