sbt (Simple Build Tool)の導入とscalatest
TDDBC名古屋で多少使える用になったsbt + scalatestが便利なので、簡単に使い方をまとめておこうと思います。
導入
http://code.google.com/p/simple-build-tool/wiki/Setup
ココを参考に。
Windowsだと、batファイルを作って、適切なjarファイル名に変えます。
最初にbatを走らせた時には、プロジェクトを作成します。
二回目以降は、このbatを走らせればsbtが起動します。
何してくれるの?
プロジェクト管理とか自動コンパイル/自動テスト実行とか。
コマンドによっては、ファイルを保存しただけでコンパイル/テスト実行まで行ってくれるので、いちいちコンパイルコマンドを叩く手間が省けます。
あれ、テスト出来ないんだけれど?
まず、scalatestパッケージをダウンロードしてきます。
http://blog.8-p.info/2010/5-sbt-scala を参考に、作られたプロジェクト内のprojectディレクトリにbuildというディレクトリを作って、中にMyProject.scalaを記述したファイルをおきます。
そしてアップデートすれば、テストできるようになります。
コマンドはー?
http://code.google.com/p/simple-build-tool/wiki/RunningSbt のアクション参考。
よく使うと思うのが、
- test - テストの実行(1回のみ)
- ~test - テストの自動実行。ファイルの更新(保存)に合わせて、自動でテストを実行する。
- trace on/off - テスト時の例外トレースを出すかどうか。*1
- info / error - 表示するメッセージレベルの変更
あたりだと思う。
自分に使いやすい環境をどうぞ。
Scalatest
http://www.scalatest.org/quick_start
この辺りで、どんな使い方ができるのかを見て下さい。
いくつか使ってみて、自分がTDDをするなら、scalatest.Spec + MustMatchersが好きかなーと、個人的に思いました。
使ってみるとこんな感じ。
// SampleTest.scala import org.scalatest.Spec import org.scalatest.matchers.MustMatchers class SampleTest extends Spec with MustMatchers { describe("Sampleは") { val s = Sample(10) it("数値を聞ける") { s.say must be (10) } it("平方根を聞ける") { s.sqrt must be (3.1622 plusOrMinus 0.001) } } describe("計算") { it("0除算は例外が返る") { evaluating{ 10 / 0 } must produce [ArithmeticException] } } }
// Sample.scala case class Sample(val n: Int) { def say() = n def sqrt() = Math.sqrt(n: Double) }
// sbtが出力するメッセージの一部
[info] == test-start ==
[info] == test-start ==
[info]
[info] == SampleTest ==
[info] Sampleは
[info] Test Starting - Sampleは 数値を聞ける
[info] Test Succeeded - Sampleは 数値を聞ける
[info] Test Starting - Sampleは 平方根を聞ける
[info] Test Succeeded - Sampleは 平方根を聞ける
[info] 計算
[info] Test Starting - 計算 0除算は例外が返る
[info] Test Succeeded - 計算 0除算は例外が返る
[info] == SampleTest ==
[info]
[info] == test-complete ==
[info] == test-complete ==
[info]
[info] == test-finish ==
[info] Passed: : Total 1, Failed 0, Errors 0, Passed 1, Skipped 0
[info]
[info] All tests PASSED.
[info] == test-finish ==
[info]
[info] == test-cleanup ==
[info] == test-cleanup ==
[info]
[info] == test ==
[info] == test ==
[success] Successful.
より詳しい使い方は
http://www.scalatest.org/scaladoc/doc-1.0/org/scalatest/matchers/MustMatchers.html
を参照してください。