Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
自作して理解するxUnit / self-made-xunit
Kazuki Higashiguchi
PRO
September 21, 2019
Technology
2
1.1k
自作して理解するxUnit / self-made-xunit
PHPカンファレンス北海道2019で発表したxUnitを自作することで理解するというトークです
Kazuki Higashiguchi
PRO
September 21, 2019
Tweet
Share
More Decks by Kazuki Higashiguchi
See All by Kazuki Higashiguchi
A guide to joining operational work in your new DevOps team
hgsgtk
PRO
1
770
HTTP Tunneling in Go
hgsgtk
PRO
0
140
ブラウザ自動操作技術の深層へ、直接触れて学ぶ WebDriver と Chrome DevTools Protocol
hgsgtk
PRO
3
4.1k
HTTP Server on random available port in Go
hgsgtk
PRO
0
140
Agile Testingを夢見たテスト自動化 〜ATDDへの挑戦から始まる 1年間の試行錯誤〜 / dreaming agile testing at basebank
hgsgtk
PRO
13
5.5k
Create Go WebDriver client from scratch
hgsgtk
PRO
1
1.5k
PHPでWeb Driver Clientを自作する〜己の手でブラウザ操作自動化を完全理解する方法〜 / phpcon2021
hgsgtk
PRO
0
1.5k
振り返りを積み上げて自分たちのプラクティスとして昇華•体得していくための仕組みと考え方 / ScrumFestMikawa2021
hgsgtk
PRO
3
1.6k
E2Eのテスト環境とテストデータの理想と現実 〜現実のシステムでE2Eテストを作り維持する工夫と具体事例〜 / real world e2e testing
hgsgtk
PRO
5
4.8k
Other Decks in Technology
See All in Technology
ログラスを支える技術的投資の仕組み / loglass-technical-investment
urmot
9
1.9k
質の良い”カイゼン”の為の質の良い「振り返り」
shirayanagiryuji
0
130
Goで実装するブランドネットワークとの接続ポイント
pongzu
2
280
MySQL v5.7 勉強会/study-mysql-ver-5-7
andpad
0
2.1k
COSCUP x KCD Taiwan 2020 - 那些年我們在開源社群的日子 - Cloud Native Taiwan
pohsien
0
120
セキュキャンを卒業してその後
kurochan
0
590
疎ベクトル検索と密ベクトル検索: 第68回 Machine Learning 15minutes! Broadcast
keyakkie
1
250
脆弱性スキャナのOWASP ZAPを コードベースで扱ってみる / OWASP ZAP on a code base
task4233
1
250
20220803投資先CXO候補者向け 会社紹介資料_合同会社BLUEPRINT
hik
0
470
ソフトウェアアーキテクチャの基礎: Software Architecture in a Nutshell
snoozer05
31
9k
2022 COSCUP - GKE Backend Cluster 除雷分享
brentchang
0
120
eBPFで実現するコンテナランタイムセキュリティ / Container Runtime Security with eBPF
tobachi
PRO
5
1.8k
Featured
See All Featured
Making Projects Easy
brettharned
98
4.4k
Bootstrapping a Software Product
garrettdimon
296
110k
GraphQLとの向き合い方2022年版
quramy
16
8.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
15
3.8k
Art, The Web, and Tiny UX
lynnandtonic
280
18k
Building Your Own Lightsaber
phodgson
95
4.7k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
Faster Mobile Websites
deanohume
294
28k
Designing for humans not robots
tammielis
242
24k
Raft: Consensus for Rubyists
vanstee
127
5.5k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
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 みなさんもぜひ