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
1
940
ZendFWでテストやろうぜ!
古いZendFWで動くシステムでも自動テストしたい!
monochromegane
February 19, 2013
Tweet
Share
More Decks by monochromegane
See All by monochromegane
Go言語での実装を通して学ぶLLMファインチューニングの仕組み / fukuokago22-llm-peft
monochromegane
0
180
不確実性下における目的と手段の統合的探索に向けた連続腕バンディットの応用 / iot70_gp_rff_mab
monochromegane
2
280
なめらかなシステムと運用維持の終わらぬ未来 / dicomo2025_coherently_fittable_system
monochromegane
0
7.4k
ベクトル検索システムの気持ち
monochromegane
38
12k
Go言語での実装を通して学ぶ、高速なベクトル検索を支えるクラスタリング技術/fukuokago-kmeans
monochromegane
1
270
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
330
多様かつ継続的に変化する環境に適応する情報システム/thesis-defense-presentation
monochromegane
1
1.1k
Online Nonstationary and Nonlinear Bandits with Recursive Weighted Gaussian Process
monochromegane
0
800
AIを前提とした体験の実現に向けて/toward_ai_based_experiences
monochromegane
2
1.1k
Other Decks in Technology
See All in Technology
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
17k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
680
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
250
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
68k
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
210
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
190
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.6k
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
180
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
600
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
250
Amazon Bedrock Knowledge Basesチャンキング解説!
aoinoguchi
0
160
コンテナセキュリティの最新事情 ~ 2026年版 ~
kyohmizu
2
370
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
Are puppies a ranking factor?
jonoalderson
1
2.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
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系のテストによる代替 を検討)