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
920
ZendFWでテストやろうぜ!
古いZendFWで動くシステムでも自動テストしたい!
monochromegane
February 19, 2013
Tweet
Share
More Decks by monochromegane
See All by monochromegane
Go言語での実装を通して学ぶLLMファインチューニングの仕組み / fukuokago22-llm-peft
monochromegane
0
51
不確実性下における目的と手段の統合的探索に向けた連続腕バンディットの応用 / iot70_gp_rff_mab
monochromegane
2
120
なめらかなシステムと運用維持の終わらぬ未来 / dicomo2025_coherently_fittable_system
monochromegane
0
2.2k
ベクトル検索システムの気持ち
monochromegane
36
11k
Go言語での実装を通して学ぶ、高速なベクトル検索を支えるクラスタリング技術/fukuokago-kmeans
monochromegane
1
200
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
280
多様かつ継続的に変化する環境に適応する情報システム/thesis-defense-presentation
monochromegane
1
990
Online Nonstationary and Nonlinear Bandits with Recursive Weighted Gaussian Process
monochromegane
0
610
AIを前提とした体験の実現に向けて/toward_ai_based_experiences
monochromegane
2
1k
Other Decks in Technology
See All in Technology
アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1
ks91
PRO
0
150
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
6.4k
kintone開発チームの紹介
cybozuinsideout
PRO
0
73k
認知戦の理解と、市民としての対抗策
hogehuga
0
190
プロジェクトマネジメントは不確実性との対話だ
hisashiwatanabe
0
190
Autonomous Database Serverless 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
18
52k
Preferred Networks (PFN) とLLM Post-Training チームの紹介 / 第4回 関東Kaggler会 スポンサーセッション
pfn
PRO
1
130
AIが住民向けコンシェルジュに?Amazon Connectと生成AIで実現する自治体AIエージェント!
yuyeah
0
240
Rethinking Incident Response: Context-Aware AI in Practice - Incident Buddy Edition -
rrreeeyyy
0
130
Telemetry APIから学ぶGoogle Cloud ObservabilityとOpenTelemetryの現在 / getting-started-telemetry-api-with-google-cloud
k6s4i53rx
0
170
OCI Bastionサービス
oracle4engineer
PRO
1
100
AIと描く、未来のBacklog 〜プロジェクト管理の次の10年を想像し、創造するセッション〜
hrm_o25
0
120
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Rails Girls Zürich Keynote
gr2m
95
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
A Tale of Four Properties
chriscoyier
160
23k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Producing Creativity
orderedlist
PRO
347
40k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
560
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.6k
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系のテストによる代替 を検討)