以前の記事で
STAR Auto Testing Frameworkを紹介した。
(作者本人も驚いていたようだ。)
今回は実践してみたのでその辺りを書いてみようと思う。
テスト駆動開発を実践する上で、
私はテストケースをというコードを書くことに異議を唱えた。
(もちろん理解者はゼロ)
理由は以前も書いたが、
テスト仕様書とテストケースという内容が全く同じで言語が違うだけもの2回も用意する意味がないからだ。
仕様書を書けばテストケースが出来上がるのが理想の形だろう。
そうすれば仕様書とテスト内容が異なるようなことも起きない。
似たような例にデータベースがある。
MySQLにはMySQL Workbenchというデータベース設計ツールがある。
(旧DB Designer4と言えばわかるだろうか。)
これでDB設計し、ER図を書くと、SQL分が発行されデータベースが出来上がる。
こうすることで設計書と実際の齟齬を無くしている。
逆にドキュメントを書かないとテストも出来ないし、
ER図を描かないとDBができないので、
ドキュメント作成の意識も高まるといえる。
STAR Auto Testing Frameworkは単体テストとSTに対応している。
前者はPHPUnit, JUnitを使用、後者はSeleniumを使うことを前提としている。
これら一つ一つだけでも一冊の本があるぐらいなのでここでは詳細な説明は省く。
そして私はJavaに明るくは無いのでJUnitのことは今回は取り上げないが内容に差はないと思う。
あと文章が長くなったので今回は単体テストだけ行う。
PHPUnitは
SimpleTestと並んで割と一般的に使われているテストフレームワーク。
テストケースを作成しphpunitとコマンドを打てばがんがんテストをしてくれる。
Seleniumはブラウザを使って自動テストをしてくれるテストフレームワーク。
いくつか種類があるが
STAR Auto Testing FrameworkではFirefoxプラグインのSeleniumIDEを使うことを想定しているようだ。
では実際どのような流れになるのか。
全体的なフローは以下の通り。
- 仕様書を作成する
- 空のプログラムを作成
- 全部エラーになるようにテスト仕様書の作成
- テストケースの生成
- テスト実行しエラーになるのを確認
- 実装作業
- テスト実行しエラーがなくなるのを確認
重要なのは
最初のテストを全部エラーになるようにし、
実装後
すべてのエラーが出なくなることを確認すること。
こうすることで一つのメソッドに対する入出力を保障することが出来る。
テストのパターンは自身が想定しうる問題すべてを網羅しておくこと。
=> Read more!