アクションのテスト
やりたいこと。
- アクションを実行した戻り値のチェック
- テンプレート用変数のチェック
- DB操作のチェック(スタブ?
- ダミー変数でのHTML表示
- ループ変数などがあると、実際に動かすまでデザインできない
そのメソッドをどのように呼びたいのかということをDocコメントに規約どおりに書く
http://d.hatena.ne.jp/kunit/20080205#1202142580
これってどうなんだろう。
私はエディタの自動整形を使いたいのでコメントじゃない方がいいってぼんやり考えている。
こんなイメージ。
<?php class ViewUserData { /** @var int */ public $userId; /** @var Laiz_Vo_User */ public $user; /** @var string */ public $errorMessage; public function execute(DaoFactory $factory) { if (!is_numeric($this->userId)){ $this->message = 'ユーザIDを指定してください'; return 'error'; } $userDao = $factory->get('user'); $user = $userDao->getVo($this->userId); if (!$user){ $this->message = 'ユーザが存在しません'; return 'error'; } // 表示用 $this->user = $user; } public testNoUserId() { // ここでフレームワークを起動してアクションメソッドの実行 $ret = Laiz::testAction($this); // ←これの方法を考える // 設定ファイルでアサート(可能なのか?もしくは面倒じゃないのか? } public testNoUser(Request $req) { $req->add('userId', 1); // ここでフレームワークを起動してアクションメソッドの実行 ・・・ } public testSuccess(DaoFactoryStub $factory) { $this->userId = 1; // 別バージョン // ここでフレームワークを起動してアクションメソッドの実行 $ret = $this->execute($factory); // とかもできる? } }
何だかまとまらない。
フレームワークの設定、リクエスト変数(ActionName?test=trueなど)、セッション変数などでテストかどうかを切り替える。
全てのアクションのテストをしたい場合が面倒で重そうだ。
setup()やtearDown()もいいんだけど、セッションの値が不正な場合とかをチェックしようとするとそれぞれのテストメソッドに初期設定や初期化処理を書かないといけない気がする。クラスに一つずつで上手いことできるんだろうか。テストメソッドが10個あってそのうちの5個で使うとか。・・・まぁ普通に関数を書けばいいか。
まだまだ曖昧な考えだけどアクションのテストは是非作りたい。