Doctrine2 entityのテストケースを自動生成するぞ
doctrineのコマンドを実行して、自動生成されたentityのsetter、getterに関するテストは自動生成されてほしい。
- こんなところでカバレッジが落とすのもちょっとね、、、
- そもそも自動生成されたコードなんだから、テストケースも自動生成されてほしい
テストコードのないentityがそれなりに数が多いっていうか。entityもそれなりの数のプロパティを持っていたりしてだな。なぜか手書きのコードが多くてだな。うむ。
よく分かる言い方をするとだ。手抜きしたい。そんな話。
What I want
こんなテストコードジェネレーター欲しいす。なければ作るか。
- constructionした時の状態に関するテスト
- getしたらnullが取得されること
- ArrayCollectionの場合、getしたら空のArrayCollectionオブジェクトが取得されること
- getter、setterに関するテスト
- setしたら値がgetterで取得されること
- その他のdomain logicに関するテストケースとは別ファイルにしたい
- PersonAccessorTest.phpみたいなファイル
- @coversアノテーションをつけてほしい
- @covers \Satooshi\Bundle\PersonBundle\Entity\Person
- @groupアノテーションをつけてほしい
- @group unit
- @group entity
あとは、netbeansだと@assertアノテーションを付けておくと、テストケースが自動生成されるとかなんとか、どこかで見た気がする。でも、それはまた別の話か。
で、こんな感じのentityクラスがあったりすると、下のようなテストケースが出来て欲しい。手抜きしたい。
Testing domain models
開発が進んで、運用も始まって、それなりにentityがデカくなってくると、プロパティとアクセッサメソッドが邪魔になってくる。自動生成されるところなんだから、BaseEntityクラスを作った方がいいのかもしれない。generation gapパターンだったか。
- Entity/Base/Person - プロパティ定義 + setter/getterを生成する
- Entity/Person extends Base/Person - domain logicを書くところ
あるいは
- Entity/Model/Person - プロパティ定義
- Entity/Base/Person extends Model/Person - setter/getterを生成する
- Entity/Person extends Base/Person - domain logicを書くところ
こんな感じで。
テストコードを書くべきところは、Entity/Personに書いてあるコード、となる。
そういえば、hyper speed developmentなんとか、の話題で、
そもそも自動生成しないといけないようなコードってどうなのよ? そういったコードを書かなくてもいいような進化を続けているのが最近の言語やフレームワークなんじゃないの?
というような意見を、twitterか何かで見かけた気がするけど、ああ、確かにその通りだなーと思ったりした。