テストを書くのが嫌いな君へ #m3dev
DESCRIPTION
テストコード自動生成ツールに関する紹介ですTRANSCRIPT
テストを書くのが
嫌いな君へ
#m3dev Kazuhiro Sera @seratch
- テスタビリティが考慮されていないものをメンテしている(例:SerlvetFilter、生 jsp、生 PHP、CGI・・)
- ユニットテスト≠ QA、全体の工数が増えるだけ(という近視眼的な考え方)
- 書き捨てのスクリプトまで書くの?
- この辺の話題は今日はスコープ外
なぜテストを書かないのか?
それだけじゃない
- 心理的障壁(ぶっちゃけ面倒)、〆切
- コーディング量は、開発するコードよりテストコードの方が多くなる
- 普段からテストコードを書いていないと、いざというとき、テストを効率的に書けない
- だから書かない?
◯◯書くの面倒・・
- 「Java 書くの面倒・・」
“Java は半分以上 IDE に書かせる言語です(キリッ”
- 「テストコード書くの面倒・・」
“テストコードは・・・”
“テストコードもツールに書かせればいい”(ある程度までは)
FA
- 全てを書かせることはできない、あくまでひな形レベルまで
- 「何をテストしたいか」は「何をやりたいか」によって決まる、人間にしかわからない
- とはいえ、テストコードはボイラープレートの嵐、自動生成に向いている
自動化はできない
Eclipse プラグイン、Maven プラグイン、sh、bat スクリプトhttp://junithelper.org/
JUnit Helper (Java)
Eclipse プラグイン、Maven プラグインを使ったデモをします
Demo
- getter/setter 無視、型毎に引数宣言・パターン網羅をカスタマイズ可能
- モックを使ったひな形(Mockito、JMock、EasyMock、JMockit)
- テストを一つも書いてないメソッドを自動検出してテストを書くことを強制する
- テストが足りなかったら追記してくれる
良いところ
- メソッドに対してテストを書いている
→API 設計が適切ならそれ自体は有効、もちろんこれだけで十分ではない- typeという無益なテストメソッド
→テスト 0 件のクラスを JUnit が許容しないことへの対応だが、選択可能にしたい- テストメソッドの名前が独特すぎる
→細かくカスタマイズできる
- IntelliJ IDEA のプラグインがない
→そのうち作りたい・・
悪いところ
rspec-kickstarter (Ruby)
- gem install rspec-kickstarter
- rspec-kickstarter というスクリプトにパスが通ります
- rspec-kickstarter -h 参照
スクリプトつきの RubyGem です
実際に社内のプロジェクトに rspec-kickstarter を実行してみる・・・
Demo
- public なメソッドに対して一つ以上のテストを書かせる
- Rails モードで実行すると Rails の事情に合わせたテストコードが生成される(現状は controller、helper のみ)
- ERB のテンプレートを差し替え可能
良いところ
- ERB カスタマイズの仕方が微妙
→もう少しよい形を提供したいとは思っています、プラグイン機構とか
- Rails 連携が弱い
→プラグイン機構ができれば、もっとリッチな対応を 3rd party でつくれるはず
悪いところ
- 自動生成で労力が減らせます
- TODO つきのテストコードを目の前にするとちゃんと書き換えたい衝動が湧いてきて「テスト書くモード」に切り替えやすいです
- 使ってみてフィードバックがあればお気軽にどうぞ
Happy Testing!