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
自作して理解するxUnit / self-made-xunit
Search
Kazuki Higashiguchi
September 21, 2019
Technology
2.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自作して理解するxUnit / self-made-xunit
PHPカンファレンス北海道2019で発表したxUnitを自作することで理解するというトークです
Kazuki Higashiguchi
September 21, 2019
More Decks by Kazuki Higashiguchi
See All by Kazuki Higashiguchi
Practical Monitoring for Knative Serving / KubeCon + CloudNativeCon Japan 2025
hgsgtk
0
180
Cell-Based Architecture Design in AWS
hgsgtk
1
290
インフラコストとセキュリティ課題解決のためのリアーキテクチャリング / srekaigi2025
hgsgtk
3
8.9k
Design of a Stateful system for Robust Deployment and Observability
hgsgtk
0
1.6k
A guide to joining operational work in your new DevOps team
hgsgtk
1
1.7k
HTTP Tunneling in Go
hgsgtk
0
1.7k
ブラウザ自動操作技術の深層へ、直接触れて学ぶ WebDriver と Chrome DevTools Protocol
hgsgtk
3
7.1k
HTTP Server on random available port in Go
hgsgtk
0
1.2k
Agile Testingを夢見たテスト自動化 〜ATDDへの挑戦から始まる 1年間の試行錯誤〜 / dreaming agile testing at basebank
hgsgtk
13
8.6k
Other Decks in Technology
See All in Technology
AIエージェントに業務知識を届ける仕組みづくり - Knowledge Catalogを活用した知識基盤の構築
hekuchan
0
120
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
770
公共システムAdventCalendar2026
toru_kubota
0
160
eBPF 簡介 2026 版
shunghsiyu
0
170
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
5
1.3k
cdkd (CDK Direct)
gotok365
3
200
分析作業をどこまで任せるか自分で決められる AIネイティブBI『Golden Analytics』が 良さげな話 /golden-analytics-is-ai-native-bi
shinyaa31
0
110
2026 Apache Flink Community Checkpoint
rmetzger
0
150
`go get`したらELFが降ってきた件
taiyow
0
170
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
410
Lint の層を組み直した話
bengo4com
3
310
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.6k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
Speed Design
sergeychernyshev
33
2.2k
It's Worth the Effort
3n
188
29k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
How STYLIGHT went responsive
nonsquared
100
6.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
290
Are puppies a ranking factor?
jonoalderson
2
4.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
460
Bash Introduction
62gerente
615
220k
Scaling GitHub
holman
464
140k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
60k
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 みなさんもぜひ