スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

symfony1.4 jobeet 8日目

今回はユニットテストの説明。

1.0でもユニットテストやろうとしたけど挫折して、1.4ではユニットテストも使い易くなってるって記事を読んだ記憶があるのでかなり期待。
後、個人的な課題として開発工程にテスト駆動を取り入れたいので今回と次回機能テストは俺の中で結構重要な意味を持ってます。

まずはlimeテストフレームワークとテストに使用するメソッドの説明。

で、実際サンプルに基づいてJobeetクラスのテスト。
環境がWindowsでCygwinも入っていないのでグリーンにはなりません。(気が向いたらCygwin入れるかも)

その後に実際に以前作ったslugifyメソッドをテスト。
既に存在するメソッドに対してこう動くよねって視点のテストなので問題なく全部通りました。

その後、テストケースにコメントを追加して何のテストを行ったか表示するように修正。
1.0でもそうだったけど試しに日本語入れると当然化けました。
symfonyのソースファイルは基本UTF-8なのに対してコマンドプロンプトはShift-JISなので当然の結果。
そこで以前調べたコマンドプロンプトでUTF-8を表示する方法を実行して無事日本語も表示出来た。

コラム的な感じでカバレッジを調べる方法も書かれてたので試しに実行したらXDebugが入ってないので当然のようにカバレッジの計測は出来ませんでした。
なので、XDebugのインストール。
インストール方法が書かれてるサイトを参考にしてdllのダウンロードとphp.iniファイルの設定をしたけどXDebugが反映されない。
参考にしたサイトでは設定値の追加で"zend_extension_ts"という項目名になっていたのを"zend_extension"に変更したら無事反映されました。
このことをtwitterでつぶやいたら@hidenorigotoさんが以下のサイトを教えてくれました。(感謝)
http://www.php-seed.net/blog/archives/95
そこを見ると
1.zend_extensionに
2.もしデバッグビルドが有効なら、_debugを付けて、
3.もし、スレッドセーフが有効なら、_tsを付ける。
ということらしい。
真面目にtsをtestの略で参考にしたサイトはtest的にこの項目追加してますよって事なんだと思ってた^^;

その後、slugifyは機能が足りてないとの事なので新しい機能の実装。ここで本来のTDDにそってコードの修正を行う。
1.まずテストケースを追加してテストを実行し、レッドを表示(テストを失敗させる)。
2.コードの修正。
3.再度テストを実行してグリーンを表示(修正が正しいことを確認)。

その後、slugifyにはまだバグがあるのでバグを確認できるテストケースを追加して上記の流れ(レッド->修正->グリーン)で再度修正。

iconv(翻字(言語学において特定の言語を記した文字表記を別の文字による表記に移すこと))についてのコラムも記載されているのでついでだからそれもやってみた。
だが、ここで問題が。。。
コラムでは"Développeur Web"のテスト結果は"developpeur-web"となっているがテストが通らない。
で、調べてみるを"Développeur Web"にiconvを実行すると"D'eveloppeur Web"となってるため"'"が"-"に置き換えられてテストを失敗している。
しょうがないので"Développeur Web"のテストの期待値を"d-eveloppeur-web"にしてテストを通した。

 さらにこの後、Doctrine モデルクラスのユニットテストの説明
まずはテストに使用するDBの作成とテスト用DBに接続するための設定の追加。
設定の追加は以下のコマンドの実行で完了するのでラクチン。
php symfony configure:database --name=doctrine --class=sfDoctrineDatabase --env=test "mysql:host=localhost;dbname=jobeet_test" root mYsEcret
Doctrine モデルクラスのテストにはDBに接続する必要があるのでセットアップ用のクラスを追加。
後は、SQL発行するコードを書いて、上記のユニットテストとほぼ同じ流れでテストを実行。
DB取得してのテストこれでいいが今回saveメソッドをオーバーライドしてるのでそれのテストも行う。
しかし、saveメソッドテストちょっとややこしくインサートするために値のセットが必要なので値をセットするためのメソッドを追加。
その後、ユニットテスト実行して、無事終了。

試しにJobeetJobクラスのカバレッジ測ってみたら100%じゃなかったので、勉強のつもりでカバレッジが100%になるようにテストケースを修正してみた。
100%じゃない理由は__toString・getPositionSlug・getLocationSlugがテストされて無いため、これらのメソッドのテストケースを追加して無事カバレッジも100%になりました。
スポンサーサイト

コメントの投稿

非公開コメント

検索フォーム
カレンダー
04 | 2017/03 | 05
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
RSSリンクの表示
last.fm
twitter
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。