Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Yusuke Ando
25,330 views
8時間耐久PHPUnitの教室
下北沢で開催したPHPUnit講座の資料です。 動画などはこちら。 http://blog.candycane.jp/archives/1480
Technology
◦
Read more
84
Save
Share
Embed
Embed presentation
Download
Downloaded 111 times
1
/ 88
2
/ 88
3
/ 88
4
/ 88
5
/ 88
6
/ 88
7
/ 88
8
/ 88
9
/ 88
10
/ 88
11
/ 88
12
/ 88
13
/ 88
14
/ 88
15
/ 88
16
/ 88
17
/ 88
18
/ 88
19
/ 88
20
/ 88
21
/ 88
22
/ 88
23
/ 88
24
/ 88
25
/ 88
26
/ 88
27
/ 88
28
/ 88
29
/ 88
30
/ 88
31
/ 88
32
/ 88
33
/ 88
34
/ 88
35
/ 88
36
/ 88
37
/ 88
38
/ 88
39
/ 88
40
/ 88
41
/ 88
Most read
42
/ 88
43
/ 88
44
/ 88
45
/ 88
46
/ 88
47
/ 88
48
/ 88
49
/ 88
50
/ 88
51
/ 88
52
/ 88
53
/ 88
54
/ 88
55
/ 88
56
/ 88
57
/ 88
58
/ 88
59
/ 88
60
/ 88
61
/ 88
62
/ 88
63
/ 88
64
/ 88
65
/ 88
66
/ 88
67
/ 88
68
/ 88
69
/ 88
70
/ 88
71
/ 88
72
/ 88
73
/ 88
74
/ 88
75
/ 88
76
/ 88
77
/ 88
78
/ 88
79
/ 88
80
/ 88
81
/ 88
82
/ 88
83
/ 88
84
/ 88
85
/ 88
86
/ 88
87
/ 88
88
/ 88
More Related Content
PDF
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
PPTX
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
by
Fujio Kojima
PDF
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
by
shinjiigarashi
PDF
最近の単体テスト
by
Ken Morishita
PDF
Nervesが開拓する「ElixirでIoT」の新世界
by
Hideki Takase
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PPTX
「品質ダッシュボード」と「データによる意思決定」
by
Kohei Tomita
オブジェクト指向エクササイズのススメ
by
Yoji Kanno
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
by
Fujio Kojima
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
by
shinjiigarashi
最近の単体テスト
by
Ken Morishita
Nervesが開拓する「ElixirでIoT」の新世界
by
Hideki Takase
やはりお前らのMVCは間違っている
by
Koichi Tanaka
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
「品質ダッシュボード」と「データによる意思決定」
by
Kohei Tomita
What's hot
PDF
ISO/IEC/IEEE 29119 Software Testing 勉強会第3回 テストドキュメント
by
崇 山﨑
PDF
日本語テストメソッドについて
by
kumake
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
nginx入門
by
Takashi Takizawa
PPTX
今さら聞けない人のためのGitLabの始め方 Ubuntu編
by
VirtualTech Japan Inc./Begi.net Inc.
PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
PPTX
30分で分かる!OSの作り方
by
uchan_nos
PDF
Laravelとテストについて
by
Takeo Noda
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
PDF
テストマネジメントツールSquash TMを利用した継続的テスト改善
by
Mizuho Wakai
PDF
MagicOnion入門
by
torisoup
PDF
君はyarn.lockをコミットしているか?
by
Teppei Sato
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
PPTX
C# 8.0 非同期ストリーム
by
信之 岩永
PPTX
【SQiP2016】楽天のアジャイル開発とメトリクス事例
by
Kotaro Ogino
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PPTX
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
by
Game Tools & Middleware Forum
PDF
Unity In App Purchase (IAP)の使い方
by
Makoto Ito
PDF
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
PDF
RESTful Web アプリの設計レビューの話
by
Takuto Wada
ISO/IEC/IEEE 29119 Software Testing 勉強会第3回 テストドキュメント
by
崇 山﨑
日本語テストメソッドについて
by
kumake
Redisの特徴と活用方法について
by
Yuji Otani
nginx入門
by
Takashi Takizawa
今さら聞けない人のためのGitLabの始め方 Ubuntu編
by
VirtualTech Japan Inc./Begi.net Inc.
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
30分で分かる!OSの作り方
by
uchan_nos
Laravelとテストについて
by
Takeo Noda
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
テストマネジメントツールSquash TMを利用した継続的テスト改善
by
Mizuho Wakai
MagicOnion入門
by
torisoup
君はyarn.lockをコミットしているか?
by
Teppei Sato
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
by
Mikiya Okuno
C# 8.0 非同期ストリーム
by
信之 岩永
【SQiP2016】楽天のアジャイル開発とメトリクス事例
by
Kotaro Ogino
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
by
Game Tools & Middleware Forum
Unity In App Purchase (IAP)の使い方
by
Makoto Ito
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
RESTful Web アプリの設計レビューの話
by
Takuto Wada
Similar to 8時間耐久PHPUnitの教室
PDF
関西Php勉強会のlimeの話
by
Hisateru Tanaka
PDF
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
PPTX
Php development efficiency improvement
by
伸幸 茂木
PDF
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
PDF
Getting Started with Testing using PHPUnit
by
Atsuhiro Kubo
PDF
MakeGoodで快適なテスト駆動開発を
by
Atsuhiro Kubo
PDF
Eclipse PDT + MakeGoodによるPHPコードのテスト
by
Atsuhiro Kubo
PDF
CodeIgniter東京勉強会 2011.05.14
by
Takako Miyagawa
KEY
EC-CUBE + PHPUnit で 実践テスト駆動開発
by
Kentaro Ohkouchi
PDF
Code igniterでテスト駆動開発 資料作成中
by
Takako Miyagawa
KEY
Unit testで定時帰宅!
by
Funato Takashi
PDF
International php conference 2016 参加レポート
by
Ryosuke Miyahara
PDF
C# から java へのプログラム移植で体験したtddの効果は?
by
Shinichi Hirauchi
KEY
テスト初心者Androiderのためのソフトウェアテスト入門
by
Satoshi Watanabe
PDF
PHPの教室「foreachを極める」
by
Yusuke Ando
PDF
Code complete ch22_developper_test
by
Sho Shimauchi
PDF
JS開発におけるTDDと自動テストツール利用の勘所
by
Koji Nakamura
KEY
テスト駆動開発の導入ーペアプログラミングの学習効果ー
by
Shuji Watanabe
PDF
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
by
Yahoo!デベロッパーネットワーク
PDF
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
by
KLab Inc. / Tech
関西Php勉強会のlimeの話
by
Hisateru Tanaka
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
Php development efficiency improvement
by
伸幸 茂木
Introduction to Continuous Test Runner MakeGood
by
Atsuhiro Kubo
Getting Started with Testing using PHPUnit
by
Atsuhiro Kubo
MakeGoodで快適なテスト駆動開発を
by
Atsuhiro Kubo
Eclipse PDT + MakeGoodによるPHPコードのテスト
by
Atsuhiro Kubo
CodeIgniter東京勉強会 2011.05.14
by
Takako Miyagawa
EC-CUBE + PHPUnit で 実践テスト駆動開発
by
Kentaro Ohkouchi
Code igniterでテスト駆動開発 資料作成中
by
Takako Miyagawa
Unit testで定時帰宅!
by
Funato Takashi
International php conference 2016 参加レポート
by
Ryosuke Miyahara
C# から java へのプログラム移植で体験したtddの効果は?
by
Shinichi Hirauchi
テスト初心者Androiderのためのソフトウェアテスト入門
by
Satoshi Watanabe
PHPの教室「foreachを極める」
by
Yusuke Ando
Code complete ch22_developper_test
by
Sho Shimauchi
JS開発におけるTDDと自動テストツール利用の勘所
by
Koji Nakamura
テスト駆動開発の導入ーペアプログラミングの学習効果ー
by
Shuji Watanabe
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
by
Yahoo!デベロッパーネットワーク
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
by
KLab Inc. / Tech
More from Yusuke Ando
PDF
ダイナミック広告の改善と拡大
by
Yusuke Ando
PDF
DevOpsを実現するChef活用テクニック
by
Yusuke Ando
PDF
DevOpsを実現する為のChef実践テクニック Chef12対応版
by
Yusuke Ando
PDF
Testing your app with Selenium on Travis CI
by
Yusuke Ando
PDF
Travis CIで実現するPHPアプリの自動テスト
by
Yusuke Ando
PDF
Shimokita.Unity Detonatorで爆発
by
Yusuke Ando
PDF
Shimokita.Unity RigidbodyとColliderで衝突
by
Yusuke Ando
PDF
Webプログラマの為のUnity入門
by
Yusuke Ando
PDF
ゴールデンウィークに最適な学習コンテンツ
by
Yusuke Ando
PDF
Travis CIですぐに始める継続的インテグレーション
by
Yusuke Ando
PDF
ブログやサイトのJekyllへの移行
by
Yusuke Ando
PDF
PHPとTravis CIでブラウザテスト
by
Yusuke Ando
PDF
Shimokita.Unity パリの街をユニティちゃんが駆ける
by
Yusuke Ando
PDF
Dev opschef
by
Yusuke Ando
PDF
Paa s and oss
by
Yusuke Ando
PDF
New relic
by
Yusuke Ando
PDF
Engine Yardで作る NetCommons3のクラウド環境
by
Yusuke Ando
PDF
Engine Yard Cloud
by
Yusuke Ando
PDF
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
by
Yusuke Ando
PDF
20121225 php
by
Yusuke Ando
ダイナミック広告の改善と拡大
by
Yusuke Ando
DevOpsを実現するChef活用テクニック
by
Yusuke Ando
DevOpsを実現する為のChef実践テクニック Chef12対応版
by
Yusuke Ando
Testing your app with Selenium on Travis CI
by
Yusuke Ando
Travis CIで実現するPHPアプリの自動テスト
by
Yusuke Ando
Shimokita.Unity Detonatorで爆発
by
Yusuke Ando
Shimokita.Unity RigidbodyとColliderで衝突
by
Yusuke Ando
Webプログラマの為のUnity入門
by
Yusuke Ando
ゴールデンウィークに最適な学習コンテンツ
by
Yusuke Ando
Travis CIですぐに始める継続的インテグレーション
by
Yusuke Ando
ブログやサイトのJekyllへの移行
by
Yusuke Ando
PHPとTravis CIでブラウザテスト
by
Yusuke Ando
Shimokita.Unity パリの街をユニティちゃんが駆ける
by
Yusuke Ando
Dev opschef
by
Yusuke Ando
Paa s and oss
by
Yusuke Ando
New relic
by
Yusuke Ando
Engine Yardで作る NetCommons3のクラウド環境
by
Yusuke Ando
Engine Yard Cloud
by
Yusuke Ando
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
by
Yusuke Ando
20121225 php
by
Yusuke Ando
Recently uploaded
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
8時間耐久PHPUnitの教室
1.
8時間耐久 PHPUnitの教室 8時間耐久PHP classのクラス
/ Yusuke Ando (@yando) 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
2.
テキスト 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
3.
http://tech.a-listers.jp/ 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
4.
http://blog.livedoor.jp/goroyasu/archives/4196098.html
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
5.
本日の対象者 PHPを使っている 関数やクラスでコーディング
コードの修正が最近辛い 子育てブログ ころぐの作者 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
6.
PHPUnitを 使った開発を 実践の基礎知識を
学びます 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
7.
本日のメニュー PHPUnitの無い開発
PHPUnitの基礎 テストしづらいコード より快適な手法 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
8.
PHPUnitの無い開発 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
9.
原始的な開発の流れ
1.コードを書く 2.ブラウザで動作確認 3.コードを直す 2に戻る 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
10.
書いて 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
11.
動かす 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
12.
書いて 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
13.
動かす 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
14.
原始的な開発の流れ コードの記述と動作確認 のループを繰り返す
ごく自然な行為 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
15.
しかし 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
16.
プログラム は 複雑化する 8時間耐久PHPUnitの教室
/ Yusuke Ando (@yando)
17.
ライブラリ化
ページ ライブラリ 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
18.
原始的な開発の流れ
修正 修正 ページ ライブラリ 修正 修正 修正 動作確認 修正ファイルと確認対象が 一致しなくなる 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
19.
複数ページから共用
ページ ライブラリ 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
20.
きつくなってきた
ページ 動作確認 修正 修正 ページ ライブラリ 修正 動作確認 修正 修正 ページ 動作確認 確認対象が増える 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
21.
ページも複雑化
入力 動作確認 修正 修正 確認 ライブラリ 修正 動作確認 修正 修正 登録完了 動作確認 ステップに手間がかかる 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
22.
ライブラリが複雑化
修正 修正 ライブラリ 修正 修正 修正 ページ ライブラリ 動作確認 直感的でない結びつき 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
23.
開発中だったら?
修正 修正 ライブラリ 修正 修正 修正 ページ 未完成 動作確認 動作確認できない 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
24.
複雑化したプログラム
コードの記述と ブラウザでの動作確認 手間の増大 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
25.
それなら
動作確認しないで ひたすら開発? 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
26.
それは ヤバイ 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
27.
テストの種類 •ユニットテスト(単体テスト) クラスや関数を単体のテスト •結合テスト クラスや関数を組み合わせたテスト •ファンクショナルテスト(機能テスト) システムの機能の動作のテスト ブラウザでの動作確認は機能テスト 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
28.
ユニットテスト ユニットテストツールを学ぶ事で 複雑なプログラムを快適にテストできる
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
29.
PHPUnitの基礎 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
30.
PHPUnit 定番ユニットテストツール Sebastian Bergman氏作
圧倒的な多機能さ 各種OSSも利用中 PHPならこれで間違い無し 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
31.
PHPUnitの基礎
インストール テストケース作成・実行 ケース内でのテクニック 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
32.
インストール 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
33.
インストール PEAR形式で提供 コマンドラインからのイン
ストールが必要 pear config-set auto_discover 1 pear install pear.phpunit.de/PHPUnit 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
34.
PEAR? PEAR(PHP Extension and
Application Repository) はPHPで利用する事ができるライブラリ(パッケージ)を 提供しているサービス。 PEARはPHPで書かれたライ ブラリを提供しているが、C言語で書かれた拡張ライブ ラリ(extension)を提供するPECLというサービスも存 在する。 インストールが完了すると、pearという同名のコマン ドが利用できるようになっている。 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
35.
PEARのインストール先 •通常のインストール /usr/lib/php/PHPUnit •個人用 (要Pyrus) /home/ユーザ名/ 内 •プロジェクト用
(要Pyrus) プロジェクト内/vendor/ 内 通常のインストールは複数共存に問題 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
36.
これからはPyrus pyrus.pharをプロジェクト内に配置 (約10MBあるので時間かかる) 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
37.
Pyrusでのセットアップ例
適宜変更 通常のインストールは複数共存に問題 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
38.
準備OK 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
39.
テストケース作成・実行 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
40.
テストケース •テストを行う場合に書くプログラム •テスト対象のコードを実行 •実行結果をアサートメソッドで確認 •場合分けに応じてアサートを追加 •phpunitコマンドで実行される PHPUnitを使う=テストケースを書く 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
41.
テストケースの例
PHPUnitのクラスを継承 テストはtest○○という名前 テスト対象を実行 結果が想定と等しいかを検査 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
42.
テストケースの実行 ./vendor/bin/phpunit [テストケース名] 又は ./vendor/bin/phpunit [ディレクトリ名] ディレクトリを指定すると配下のテスト
ケースを全て実行する 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
43.
テストケースの実行
.が1つのテスト テスト項目を文字で表示 x がOKの意味(英語的) 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
44.
エラーがある場合
Fがエラー 失敗した検査の内容 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
45.
--colors で色つき 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
46.
PHPUnitのイメージ
テストケース 修正 修正 テストケース ライブラリ 修正 phpunit 修正 修正 テストケース ライブラリをコマンド1つで 高速にテストを実行可能 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
47.
練習 •Tankiyoクラスのテスト •テストケースを作成 tests/TankiyoTest.php •各メソッドへテストを記述 •テストを実行 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
48.
補足 各テストケースはテスト対象 のコードをrequireする必要 がある autoload機構を使わない場 合は適宜 require_once 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
49.
テストの重要点 •テストケースは幅広く •テストはこまめに実行 •テスト成功なら 同条件での挙動は同一 •思い切ったコード変更へ! 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
50.
ケース内でのテクニック 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
51.
setUp / tearDown •テストメソッドの前後に実 行される処理を記述できる •前処理や後始末が必要な場 合に利用する •各テストの共通部分を統合 8時間耐久PHPUnitの教室
/ Yusuke Ando (@yando)
52.
setUp / tearDownの例
重複した初期化処理 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
53.
setUp / tearDownの例
テストメソッドの前後に実 行される処理になる 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
54.
アサーション •実行結果を検査する assertEquals()だけでかな り生きていける •他のメソッドは応用的 •種類は増え続けている 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
55.
超豊富なアサーション assertArrayHasKey()
assertLessThanOrEqual() assertClassHasAttribute() assertNull() assertClassHasStaticAttribute() assertObjectHasAttribute() assertContains() assertRegExp() assertContainsOnly() assertStringMatchesFormat() assertCount() assertStringMatchesFormatFile() assertEmpty() assertSame() assertEqualXMLStructure() assertSelectCount() assertEquals() assertSelectEquals() assertFalse() assertSelectRegExp() assertFileEquals() assertStringEndsWith() assertFileExists() assertStringEqualsFile() assertGreaterThan() assertStringStartsWith() assertGreaterThanOrEqual() assertTag() assertInstanceOf() assertThat() assertInternalType() assertTrue() assertJsonFileEqualsJsonFile() assertXmlFileEqualsXmlFile() assertJsonStringEqualsJsonFile() assertXmlStringEqualsXmlFile() assertJsonStringEqualsJsonString() assertXmlStringEqualsXmlString() assertLessThan() 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
56.
assertEquals($a,$b) •$aがあるべき値 •$bに実際の実行結果 •一致しない場合はエラー (エラー時のメッセージを 第3引数に渡せる) 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
57.
assertCount($num,$a) •$aが$num件かどうかを検 査する •一致しない場合はエラー (エラー時のメッセージを 第2引数に渡せる) 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
58.
assertTrue($a)
assertFalse($a) assertEmpty($a) assertNull($a) •$aがtrue false 空 nullかど うかを検査する 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
59.
assertRegExp($reg,$a) •$aが$regの正規表現に マッチするかどうかを検査 する 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
60.
アノテーション •特殊なコメントを記述 •テストケースの実行時にさ まざまなオプション設定 •作者、依存、グループ等 •種類は増え続けている 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
61.
アノテーションの例 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
62.
アノテーションの例 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
63.
テストケース生成 •クラスからケースを生成 •ケースからクラスを生成 •あくまでひな形なのでテス ト自体は自力で記述する •既存のコードの移行に便利 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
64.
SkeletonGenerator インストール php
pyrus.phar install phpunit/PHPUnit_SkeletonGenerator 対象のクラス名とファイル名を指定 ./vendor/bin/phpunit-skelgen --test -- Kid ./lib/Kid.php テストの出力先やrequireが足り ない点を補う必要がある 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
65.
練習 Kid /
HtmlKid •コマンドからケースを生成 •適切な場所にケースを移動 •require を補う •テストが実行できるか確認 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
66.
テストファースト •テストケースを先に記述し てコードの挙動を決定 •記述したテストケースを通 過できるように開発 •テスト駆動開発の典型例 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
67.
テストしづらいコード 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
68.
テストしづらい? •実際に開発を進めると発生 •テストが書けない例が出る •テストの実行時間が長い •結果が不安定 コードをテストしやすく修正しないと テストできない場合がある
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
69.
テストしづらい例
処理が外部のWebに依存 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
70.
テストしづらいコード •機能が外部に依存している (各種WebAPI) •データベースに存在してい るデータに依存している •処理に時間がかかる部分 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
71.
外部に依存
DB テストケース テストケース ライブラリ phpunit テストケース API 実質、結合テストになっている 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
72.
モック •コードの中で外部に依存す る部分をテスト時に別のもの に置き換える手法 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
73.
モックできない
Getterを直接newして使う 必ずGetterのgetを呼んでしまう 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
74.
モックできる!
処理に使うオブジェクトを注入 渡されたオブジェクトのgetを使う 渡ってくるのはGetterのオブジェクト とは限らない! 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
75.
モック用のクラス •自力でスタブを作成 •PHPUnitの機能で生成も可 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
76.
モック利用例
スタブの生成 スタブの振る舞いを設定する部分 (すごい記述だが動く) 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
77.
練習モックの利用 •まずは元の状態のRecent クラスをテストしてみる •遅さを確認 •モックを使ったテスト •実物を使ったテスト 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
78.
DBUnit •テスト用のDBを毎回生成 •テスト後に全削除 •データの状態に左右されず にデータベースを使ったテ ストを行う 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
79.
さらに効率良いテスト 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
80.
phpunit.xml •phpunitコマンドのオプ ションを記述しておく事で テスト実行が簡略化される •コマンドの引数と併用もで きる 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
81.
phpunit.xml 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
82.
カバレッジレポート •テストがコードのどの部分 を実行したかをレポート •xDebug拡張を導入する必 要がある phpunit --coverage-html=/path/to/report
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
83.
カバレッジレポート 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
84.
カバレッジレポート 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
85.
継続ビルド(CI) コードをコミットする度に自動でテスト実 行、レポート出力、アラート送信
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
86.
まとめ 8時間耐久PHPUnitの教室 / Yusuke
Ando (@yando)
87.
テストとCI •モダンな開発の定番 •フレームワーク •Gitによるコード管理
•ユニットテスト •継続ビルド 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
88.
PHPUnit •かなり抽象的なツール •進化も早いが一度覚えれば そのまま使い続けられる •不毛な動作確認とバグから 逃れる希望 8時間耐久PHPUnitの教室 /
Yusuke Ando (@yando)
Download