TDD Advent Calendar jp: 2012 の1日目です。
初日ということで、TDDをとりまく環境について浅く狭く紹介したいと思います。
TDD(Test Driven Development=テスト駆動開発)とは何か?
普通は一通り実装が終わってからテストを書くと思いますが*1、先にテストを書くこと(テストファースト)で全体的にメンテしやすいコードにできます。
詳しくは wikipedia:テスト駆動開発 参照。
TDDをすることにより何が嬉しいか
- 最初からテスト有りきで実装をするため、テストが網羅されている
- 最近流行りのCIを活用できる
- Jenkinsでテストするにもユニットテストがないと始まりませんよね!
その他メリット・デメリットはあると思いますが、その辺は後の方々に譲ります。
各言語のTDD事情
TDDやるにも各言語で事情が変わってくるため、自分が実際に使ったことのある範囲でまとめておきます。
Java
JUnit
最近Groovy勢に押され気味ですが、まだまだ JUnit が主流だと思います。
ただ個人的にJUnitはJavaであるが故にいろいろと面倒くさいのでGroovyベースのspock を推したいです。(僕自身は実際に使ったことはないのでここでは説明しません)
自分のTDD環境です
- Eclipse 4.2
- QuickJUnit plugin
- EclipseでTDDやるならこれがないと始まらない
- Market placeから検索してインストール
- 「Ctrl + 0」で現在行でテスト実行、「Ctrl + 9」でプロダクトコードとテストコードを相互移動
- QuickJUnit plugin
- JUnit
- hamcrest
- JUnit 4系の大きな特徴としてassertThatがありDSL(Domain-Specific Language = ドメイン固有言語)っぽくテストを書くことができるのですが、JUnitデフォルトの機能だと若干機能が不足してるためhamcrestで補います
- 参考:hamcrestのMatcherメモ - 都元ダイスケ IT-PRESS
参考文献
- 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2003/09
- メディア: 単行本
- 購入: 43人 クリック: 1,011回
- この商品を含むブログ (153件) を見る
TDDの勉強会だと大抵この本を勧められる。
サンプルコードはJavaだけどそこまで他言語で写経するのも面白い
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 132回
- この商品を含むブログ (2件) を見る
@shuji_w6eさん著。僕が書いているようなことは全部この本に書いています。JUnitのことはもちろん周辺技術に関してもまとまっているためおすすめ
詳しい紹介
Ruby / Ruby on Rails
Test::Unit
Ruby標準のライブラリ。標準的なxUnitの機能は備えているので問題はないのですが、後述のRSpecが素晴らしすぎるためあまり使われてないと思います。
RSpec
Railsだとこれが一番主流な気がします。他言語の人から見ると黒魔術な仕様が結構ありますが*3、使いこなせばテストコードをシンプルにできます
関連リンク
- Spec::Matchers - APIdock
- RSpecのMatcherリファレンス。specの書き方に迷ったらとりあえずここを読む
spork
起動が遅いRailsを補うためのgem。予めRailsを起動しておいて起動を速くする。Gemfileを更新した時は一度再起動しないといけないのがネック
関連リンク
JavaScript
QUnit
jsはテスティングフレームワークが乱立してて何を使うか悩みどころですが、なんとなくQUnitが一番使われてる気がします。*4
AZusaar!!のクライアントサイドのテストでは
- QUnit
- QUnit-TAP : QUnitの実行結果をTAP形式で出力
- phantomjs : jsのテストをコンソールで実行する
- prove : 特定のシェルを置いておくことでテストスイートとして使える
という構成になってます。
詳しくはソース参照
- https://github.com/sue445/azusaar_js
- ディレクトリやファイル構成はオレオレ仕様なので標準的ではないと思います
参考リンク
JsTestDriver
JsTestDriver自体が小さなサーバになっていて、その中でjsを読み込んでテストを実行する。
ただこれが曲者で、(自分が使った当時は)日本語でassertすると文字化けしてテストが通らないという問題があったため使うのをやめました。
QUnitに比べてアサーションが充実してたり、EclipseやWebStormからプラグイン出てるのはいいんだけどなぁ・・・
Jasmine
最近人気急上昇みたい
使ったことはないので詳しくは触れませんが、テストコードがrspecっぽくて素敵。欠点はjsの言語仕様上functionがうざいということかw
今度新規でjsを書くことがあれば是非使いたい
参考文献
- 作者: Christian Johansen,長尾高弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2011/11/25
- メディア: 大型本
- 購入: 15人 クリック: 306回
- この商品を含むブログを見る
「テスト駆動開発入門」のjs版といっても差し支えない。
jsならではのDOMのテストやmockの紹介がためになる
勉強会
- TDD BootCamp(通称: TDDBC)
- 終日ペアプロやコードレビュー大会など
- 不定期開催なので ML や ハッシュタグ#tddbc をチェックしておく