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
monochromegane
February 19, 2013
Technology
1
940
ZendFWでテストやろうぜ!
古いZendFWで動くシステムでも自動テストしたい!
monochromegane
February 19, 2013
Tweet
Share
More Decks by monochromegane
See All by monochromegane
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
380
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
4
410
Go言語での実装を通して学ぶLLMファインチューニングの仕組み / fukuokago22-llm-peft
monochromegane
0
200
不確実性下における目的と手段の統合的探索に向けた連続腕バンディットの応用 / iot70_gp_rff_mab
monochromegane
2
290
なめらかなシステムと運用維持の終わらぬ未来 / dicomo2025_coherently_fittable_system
monochromegane
0
8.4k
ベクトル検索システムの気持ち
monochromegane
38
12k
Go言語での実装を通して学ぶ、高速なベクトル検索を支えるクラスタリング技術/fukuokago-kmeans
monochromegane
1
280
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
350
多様かつ継続的に変化する環境に適応する情報システム/thesis-defense-presentation
monochromegane
1
1.2k
Other Decks in Technology
See All in Technology
When an innocent-looking ListOffsets Call Took Down Our Kafka Cluster
lycorptech_jp
PRO
0
120
Kubernetesにおける推論基盤
ry
1
290
タスク管理も1on1も、もう「管理」じゃない ― KiroとBedrock AgentCoreで変わった"判断の仕事"
yusukeshimizu
5
2.5k
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
2
270
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
130
ナレッジワークのご紹介(第88回情報処理学会 )
kworkdev
PRO
0
170
vLLM Community Meetup Tokyo #3 オープニングトーク
jpishikawa
0
310
聲の形にみるアクセシビリティ
tomokusaba
0
170
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
180
マネージャー版 "提案のレベル" を上げる
konifar
22
15k
[AEON TECH HUB #24] お客様の長期的興味の理解に向けて
alpicola
0
140
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
340
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Technical Leadership for Architectural Decision Making
baasie
3
280
YesSQL, Process and Tooling at Scale
rocio
174
15k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
69
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
260
Art, The Web, and Tiny UX
lynnandtonic
304
21k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
210
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
220
Paper Plane (Part 1)
katiecoart
PRO
0
5.4k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
110
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
210
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系のテストによる代替 を検討)