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
ZendFWでテストやろうぜ!
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
monochromegane
February 19, 2013
Technology
960
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ZendFWでテストやろうぜ!
古いZendFWで動くシステムでも自動テストしたい!
monochromegane
February 19, 2013
More Decks by monochromegane
See All by monochromegane
適応的スパムフィルタのための軽量な類似メッセージカウンタ / jsai2026-adaptive-spam-filter
monochromegane
0
4k
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
3
780
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
580
Go言語での実装を通して学ぶLLMファインチューニングの仕組み / fukuokago22-llm-peft
monochromegane
0
250
不確実性下における目的と手段の統合的探索に向けた連続腕バンディットの応用 / iot70_gp_rff_mab
monochromegane
2
400
なめらかなシステムと運用維持の終わらぬ未来 / dicomo2025_coherently_fittable_system
monochromegane
0
23k
ベクトル検索システムの気持ち
monochromegane
38
13k
Go言語での実装を通して学ぶ、高速なベクトル検索を支えるクラスタリング技術/fukuokago-kmeans
monochromegane
1
310
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
370
Other Decks in Technology
See All in Technology
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
150
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.7k
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
270
WebGIS AI Agentの紹介
_shimizu
0
600
時期が悪い!それでもRaspberry Piを買って遊んで活用するには / 20260627-osc26do-rpi-jikigawarui
akkiesoft
1
940
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.3k
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
0
300
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
8
4.6k
BPaaSで進むAIオペレーションの現在地 AI実装が効く領域とスケーラビリティの選定と実装
kentarofujii
0
230
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
240
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
160
グローバルチームと挑むプロダクト開発
sansantech
PRO
1
100
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
760
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
750
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
The Limits of Empathy - UXLibs8
cassininazir
1
370
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Transcript
ZendFWで テストやろうぜ Zend_Testを用いたテストの自動化 ムームードメイン:miyakey
Zend_Test • PHPUnitを拡張したZendFrameworkアプリ ケーションテスト用のコンポーネント • コントローラ層向けテストを行うクラスとモデル 層向けテストを行うクラスを提供
Zend_Test_PHPUnit_ ControllerTestCase 擬似的なリクエストとレスポンスを用いてコントロー ラの動作や出力を検証するクラス。 リクエスト 処理のリクエスト結果を検証。ルーティングが正しく行わ れているかなど。 リダイレクト コントローラの処理の結果としてリダイレクトが行われた ことを検証。
出力 コントローラの処理の結果として表示される内容が正し いことを検証。 レスポンス コントローラの処理の結果として返却されるレスポンス (ヘッダー等)を検証。
Zend_Test_PHPUnit_ DatabaseTestCase ZendFrameworkのDB接続を外部から注入するこ とでモデル単体での検証するクラス。 • テーブルの初期化 • 外部ファイルによる初期データ投入 • 値の検証
おさいぽ!/顧客管理はZendFrameworkを使って います。 おさいぽ!/顧客管理 PHP 5.2.4 MySQL 5.0 ZendFramework 1.5.2
Zend_Test_PHPUnit_ DatabaseTestCase Zend_Testは、 ZendFramework1.6から導入されました。
うわっ… Zendのバージョン、 低すぎ…? 無料5分で、適正バージョンや ZendFW基礎能力が分かる 「おさいぽ!価値診断テスト」。 受けた人は40万人を突破! 結果もすぐ分かると大人気だ。 Check >>
あなたの適正バージョンは?
開発者の端末 PHP5.2 PHPUnit3.5 ZendFramework 1.5 + 1.12 MySQL5.5 おさいぽ!テスト構成 tests/
├── application │ ├── config │ ├── controllers │ └── models ├── bootstrap.php ├── fixture ├── library │ ├── Custom │ │ ├── CustomDomQuery.php │ │ ├── DummySeed.xml │ │ ├── OkanControllerTestCase.php │ │ └── OkanDatabaseTestCase.php │ └── Zend │ └── Test └── runTest.sh • 既存アプリケーションにテスト用資 産を格納。 • library/Zend配下にZend_Testが 動作するための1.12の資産、 library/Custom配下にテスト簡略 化のためのクラスを格納。 • テスト資産はapplication配下に対 象の構成にあわせて格納
コントローラのテスト .1 POSTリクエスト $this->request->setPost(array( 'paramName' => 'paramValue' )); $this->request->setMethod('POST'); $this->dispatch('/path/to/url');
※連続した画面遷移にはresetRequestとresetResponseメソッドを利用する。
コントローラのテスト .2 検証 $this->assertResponseCode(200); $this->assertAction('actionName'); $this->assertRedirectTo('redirectUrl'); $this->assertQuery('path'); ※出力に対する検証はCSSセレクタによる柔軟な要素の指定が可能。
モデルのテスト .1 準備 protected function setUp() { parent::setUp('seed.xml'); } ※setUpメソッドによるseedの指定はおさいぽ!用にgetDataSetをラップ
モデルのテスト .2 検証 $result = $this->_model->method(); $this->assertEquals('expect', 'actual'); $this->assertDataSetsEqual(expect, actual);
※PHPUnitと同様
Bad Know How おさいぽ!との戦いの歴史
1.5でZend_Test 1.5でZend_Testを動かすためにちょっと無理をし ています。 動作に必要な同名クラスはincludeの順番で1.12 のものを先に読み込ませています。
PHPUnitのバージョン PHPUnitはひとつ古い3.5でないとうまく動きませ んでした。
ZendFramework1.5のバグ ZendFramework1.5には、ローカル実行時のロ ケール判定にバグがあります。 Zend_Dateの日付文字列取得を含むクラスで不 審な挙動となります。 ⇒ここを修正してください。 Zend_Locale: L282 $language =
substr($language, 0, strpos ($language, '.') -1); // -1 不要!
ダミーアクセス コントローラのテストはDB接続アダプタの読み込 みのため、一度ダミーアクセスを行なって、正常な レスポンスを受信してからでないとうまくいきません でした。 ⇒親クラスで吸収するように回避しています。
要素の値がとれない コントローラのテストでCSSセレクタで要素を指定 して検証するメソッドはあるけど、実際に要素の値 を取得するメソッドがない。 複数画面を遷移する場合に前画面で取得したパラ メタがわからない。 ⇒つくりました。 CSSセレクタで属性、値を取得するメソッドを提供 するクラス(CustomDomQuery)
defineの恐怖 処理内で"define"を利用していて、該当処理に対 して複数回テストを行う場合、予期しない結果とな ります。 ⇒PHPUnitはテストスイートをひとつのプロセスで 実行するためです。プロセス内でdefine定数は最 初の一回しか値を定義できません。 別プロセスで動作するよう @runInSeparateProcessアノテーションをつけま しょう。
スレーブデータベースへのアクセス モデルのテストではDB接続を外部から注入できる けど、おさいぽ!ではスレーブデータベースへの接 続処理でデフォルトアダプターを置き換えるので意 味ないよ。 ⇒テスト用のiniファイルを読み込むように変更しま した
まとめ
テストつくろう! • モデルのテストはZend_Test • コントローラのテストは正直微妙 (Viewの検証との分離ができていない、出力結 果に対しての検証でJavaScript系の検証まで はできない等。Selenium系のテストによる代替 を検討)