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
280
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
140
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
240
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
58
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
XHTMLが残したもの
yosuke_furukawa
PRO
2
800
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
390
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
280
SREの越境 / SRE Collaboration
y0hgi
0
100
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
A2UI for Android: Safely Rendering AI-Generated UI with Jetpack Compose - DroidKaigi 2026
itsmedreamwalker
0
140
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
110
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
270
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
690
Odyssey Design
rkendrick25
PRO
2
810
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Amusing Abliteration
ianozsvald
1
300
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
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