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