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
自作して理解するxUnit / self-made-xunit
Search
Kazuki Higashiguchi
September 21, 2019
Technology
2
1.8k
自作して理解するxUnit / self-made-xunit
PHPカンファレンス北海道2019で発表したxUnitを自作することで理解するというトークです
Kazuki Higashiguchi
September 21, 2019
Tweet
Share
More Decks by Kazuki Higashiguchi
See All by Kazuki Higashiguchi
インフラコストとセキュリティ課題解決のためのリアーキテクチャリング / srekaigi2025
hgsgtk
0
110
Design of a Stateful system for Robust Deployment and Observability
hgsgtk
0
1.2k
A guide to joining operational work in your new DevOps team
hgsgtk
1
1.3k
HTTP Tunneling in Go
hgsgtk
0
1.4k
ブラウザ自動操作技術の深層へ、直接触れて学ぶ WebDriver と Chrome DevTools Protocol
hgsgtk
3
6.5k
HTTP Server on random available port in Go
hgsgtk
0
960
Agile Testingを夢見たテスト自動化 〜ATDDへの挑戦から始まる 1年間の試行錯誤〜 / dreaming agile testing at basebank
hgsgtk
14
7.7k
Create Go WebDriver client from scratch
hgsgtk
1
2.2k
PHPでWeb Driver Clientを自作する〜己の手でブラウザ操作自動化を完全理解する方法〜 / phpcon2021
hgsgtk
2
2.5k
Other Decks in Technology
See All in Technology
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
730
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
170
なぜfreeeはハブ・アンド・スポーク型の データメッシュアーキテクチャにチャレンジするのか?
shinichiro_joya
2
770
今から、 今だからこそ始める Terraform で Azure 管理 / Managing Azure with Terraform: The Perfect Time to Start
nnstt1
0
250
【Oracle Cloud ウェビナー】2025年のセキュリティ脅威を読み解く:リスクに備えるためのレジリエンスとデータ保護
oracle4engineer
PRO
1
110
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
12k
サーバレスの未来〜The Key to Simplifying Everything〜
kawaji_scratch
1
230
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.6k
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
390
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
2
300
20250116_自部署内でAmazon Nova体験会をやってみた話
riz3f7
1
130
Featured
See All Featured
Embracing the Ebb and Flow
colly
84
4.5k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
Fireside Chat
paigeccino
34
3.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Agile that works and the tools we love
rasmusluckow
328
21k
Code Review Best Practice
trishagee
65
17k
Into the Great Unknown - MozCon
thekraken
34
1.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
174
51k
A designer walks into a library…
pauljervisheath
205
24k
Designing Experiences People Love
moore
139
23k
Transcript
© - BASE, Inc. X ⾃作して理解するxUnit . . PHP Conference
Hokkaido - @hgsgtk
© - BASE, Inc. : @hgsgtk Who am I? 東⼝
和暉 ( Higashiguchi Kazuki ) Back-end Engineer (Go, PHP, Python ) BASE BANK, Inc. (BASE, Inc.) / Dev Division / Tech Lead
© - BASE, Inc. 毎⽇仲良しテストコード
© - BASE, Inc. ⾃分がPHPUnitの気持ちを知れば
© - BASE, Inc. もっと仲良くなれる
© - BASE, Inc. ⾃作して理解しよう
© - BASE, Inc. ところでPHPUnitとは https://phpunit.de/
© - BASE, Inc. xUnitとは テスティングフレームワークの総称 Kent Beck⽒が作成したSmalltalk製の SUnitが親となり、Java‧PHP .etcへ
https://en.wikipedia.org/wiki/XUnit
© - BASE, Inc. xUnitファミリーが持っている機能 • Test Method • Assertion
Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
© - BASE, Inc. 今⽇⾃作するもの • Test Method • Assertion
Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
© - BASE, Inc. いざ
© - BASE, Inc. hgsgtk/mpunit https://github.com/hgsgtk/mpunit
© - BASE, Inc. こんな感じのテストを実⾏したい
© - BASE, Inc. xUnitファミリーが持っている機能 • Test Method • Assertion
Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
© - BASE, Inc. まずは実⾏可能コマンドを作成 /bin/mpunit
© - BASE, Inc. Test Methodsをつくったら実⾏されるように .テストファイルを探す .テストクラスを探す .テストメソッドを探す .テストメソッドを実⾏する
© - BASE, Inc. 1. テストファイルを探す /src/Command.php *Test.php のファイルを集める
© - BASE, Inc. 2. テストクラスを探す /src/Command.php 定義済みクラスから、ユーザー定義型で MPUnit\TestCaseを 継承しているを探し出す
© - BASE, Inc. (補⾜)クラスを集める • get_declared_classes() • 定義済みのクラスの名前を配列として返す •
ReflectionClass::isUserDefined() • 内部クラスかどうかを検査 • ReflectionClass::getParentClass() • 親クラスの情報を取得 https://www.php.net/manual/ja/reflectionclass.isuserdefined.php https://www.php.net/manual/ja/function.get-declared-classes.php https://www.php.net/manual/ja/reflectionclass.getparentclass.php
© - BASE, Inc. 3. テストメソッドを探す /src/Command.php テストクラスのPUBLICメソッドから、先頭が test で始まるメ
ソッドを探す
© - BASE, Inc. (補⾜)関数を集める • ReflectionClass::getMethods • クラスのメソッド名を取得 •
ReflectionMethod::IS_PUBLIC etc https://www.php.net/manual/ja/reflectionclass.getmethods.php
© - BASE, Inc. 4. テストメソッドを実⾏する /src/Command.php 実⾏、AssertionErrorがなければ成功(.)、あれば失敗(F)
© - BASE, Inc. hgsgtk/mpunit https://github.com/hgsgtk/mpunit ⼀旦デモ
© - BASE, Inc. xUnitを知る • Test Methodの⾒つけ⽅の⼤きく2つ • Test
Discovery‧Test Enumeration • 多くのxUnitファミリーは前者、フレー ムワークがテストメソッドを⾒つける、 ユーザーが⼿動で登録しなくていい
© - BASE, Inc. 今⽇⾃作するもの • Test Method • Assertion
Method • Test Suites • Run tests, Get report 参考書籍:Meszaros, Gerard. xUnit Test Patterns: Refactoring Test Code』
© - BASE, Inc. なにでアサーションするか • assert function(PHP) • (Minimumにやりたかったので)
• beberlei/assert • webmozart/assert • hamcrest/hamcrest-php etc
© - BASE, Inc. assert関連の設定をする /bin/mpunit
© - BASE, Inc. (補⾜)assert⽤の設定ディレクティブ • zend.assertions (default: ) •
assert()を⽣成するか‧実⾏するか • 1 の場合、コードは⽣成され実⾏される • assert.exception (default: ) • アサーション失敗に指定したオブジェクトをス ロー • 指定なしだとAssertionError https://www.php.net/manual/ja/function.assert.php https://www.php.net/manual/ja/class.assertionerror.php
© - BASE, Inc. (補⾜)assert⽤のオプション • 様々なassertフラグを設定できる • ASSERT_ACTIVE •
ASSERT_WARNING • ASSERT_BAIL • ASSERT_QUIET_EVAL • ASSERT_CALLBACK https://www.php.net/manual/ja/function.assert-options.php
© - BASE, Inc. assertion assert関数を実⾏
© - BASE, Inc. こんな感じのテストを実⾏したい TestCaseを継承したクラスから assertSame が使えるように
© - BASE, Inc. 実⾏結果
© - BASE, Inc. まとめ • ⾃作すると、xUnitがどういうことをし てくれているか分かる(ex. Test Discovery)
• テスティングフレームワークの提供者の 気持ちに近づき、ユーザーの僕らのテス トリテラシーも上がるのかもしれない
© - BASE, Inc. hours 制作時間
© - BASE, Inc. Special Thanks: 参考資料 • PHPでテスティングフレームワークを実装する前 に知っておきたい勘所
/ @tadsan • https://www.youtube.com/ watch?v=o YY JnAOwU • sebastianbergmann/phpunit • https://github.com/sebastianbergmann/ phpunit
© - BASE, Inc. X みなさんもぜひ