Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【最終回】Drupal モジュール開発入門講座 第10回 自動テスト
Search
アクイアジャパン 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
240
Drupal 10.3の新機能紹介ウェビナー
acquiajp
0
290
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
140
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
250
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
61
DrupalCon Lille 2023 総まとめウェビナー
acquiajp
0
120
コンテンツ設計手法で変更に強いアプリケーションを実現する〜ローコードによるWebアプリのバックエンド実装 #CNDF2023
acquiajp
0
410
DrupalCon Pittsburgh 2023 総まとめウェビナー
acquiajp
0
110
Acquia製品概要&Site Studioデモのご紹介
acquiajp
0
150
Other Decks in Programming
See All in Programming
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
250
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
620
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
540
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.8k
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
440
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
JRuby: Past, Present, and Future
headius
0
220
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.5k
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
20
21k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
130
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
470
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
The Curse of the Amulet
leimatthew05
3
15k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Into the Great Unknown - MozCon
thekraken
41
2.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Abbi's Birthday
coloredviolet
4
10k
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