テストコードのディレクトリ構成

今日のレガシー対応

ディレクトリ構成のお手本が見つからない

PHPUnitのテスト用ディレクトリ構成はこうしなさい、みたいなのが見つからなかったので悶々と悩み続け・・・

Rails的なディレクト

テストの内容でディレクトリを分けるか・・・

test
|-- fixtures テスト用のデータ
|-- functional コントローラのテスト
|-- integration コントローラをまたがるようなテスト
|-- mocks モック
`-- unit ユニットテスト
CakePHP的なディレクト

テスト対象ファイルで機械的に分けるか・・・

test
|-- README
|-- cases テストケース
|   |-- controllers
|   |-- helpers
|   `-- models
|-- fixtures テスト用のデータ
`-- groups テストをまとめて実行するグループ
ZendFramework的なディレクト
tests
|-- application
|   |-- controllers
|   `-- models
|-- library
`-- phpunit.xml

悩む意味はなかった

RailsCakePHPディレクトリ構成はそれぞれのテストフレームワークに従ったやり方であり、レガシーなところにとりあえずPHPUnitだけ持ってきただけの今の状態でどうこう言ってもしょうがない。

とりあえずCakePHP式に

一瞬見て何がどこにあるかすぐ分かるから。テストを導入しようとして匙を投げた先人たちは、導入の入り口付近でとまってた気がしたので、とにかく無駄に悩むのをやめるぞジョジョーーー!!
「やありゃいいんだよ」。なんか気づいたら後から直せばいいじゃん。とりあえず手を動かそう。

課題

コントローラのテストができない

フレームワークなしに自分でコントローラのテストができるようにPHPUnitの拡張を用意するのは大変。
消極的な解決策としては

  • 処理は極力modelに移動する
  • あとはSeleniumでのViewのテストでカバー
    • と思ったけどseleniumによるテストは作成コストが高すぎて割に合わない感じ
    • だいぶ抽象的ななassertionにしないとレイアウトやデータの変更ですぐだめになるし
      • コントローラーテストの代わりにはならない。