More Related Content
Similar to 8時間耐久PHPUnitの教室 (20)
More from Yusuke Ando (20)
8時間耐久PHPUnitの教室
- 9. 原始的な開発の流れ
1.コードを書く
2.ブラウザで動作確認
3.コードを直す
2に戻る
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)
- 31. PHPUnitの基礎
インストール
テストケース作成・実行
ケース内でのテクニック
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)
- 37. Pyrusでのセットアップ例
適宜変更
通常のインストールは複数共存に問題
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 41. テストケースの例
PHPUnitのクラスを継承
テストはtest○○という名前
テスト対象を実行
結果が想定と等しいかを検査
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 43. テストケースの実行
.が1つのテスト
テスト項目を文字で表示
x がOKの意味(英語的)
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 44. エラーがある場合
Fがエラー
失敗した検査の内容
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 46. PHPUnitのイメージ
テストケース
修正 修正
テストケース ライブラリ
修正
phpunit 修正 修正
テストケース
ライブラリをコマンド1つで
高速にテストを実行可能
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)
- 58. assertTrue($a)
assertFalse($a)
assertEmpty($a)
assertNull($a)
•$aがtrue false 空 nullかど
うかを検査する
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)
- 69. テストしづらい例
処理が外部のWebに依存
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 71. 外部に依存
DB
テストケース
テストケース ライブラリ
phpunit
テストケース
API
実質、結合テストになっている
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 73. モックできない
Getterを直接newして使う
必ずGetterのgetを呼んでしまう
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 74. モックできる!
処理に使うオブジェクトを注入
渡されたオブジェクトのgetを使う
渡ってくるのはGetterのオブジェクト
とは限らない!
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
- 76. モック利用例
スタブの生成
スタブの振る舞いを設定する部分
(すごい記述だが動く)
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)