Scala には複数のライブラリとテスト方法がありますが、このチュートリアルでは、ScalaTest フレームワークから FunSuite という人気のある選択肢を実演します。
sbt での Scala プロジェクト作成方法を知っている前提とします。
セットアップ
- コマンドラインで、どこかに新しいディレクトリを作成します。
- そのディレクトリに
cdして、sbt new scala/scalatest-example.g8を実行します。 - プロジェクトに
ScalaTestTutorialと名前を付けます。 - ScalaTest が依存関係として
build.sbtファイルに書かれたプロジェクトができます。. - そのディレクトリに
cdして、sbt testを実行します。 これはCubeCalculator.cubeという1つのテストを含むテストスイートCubeCalculatorTestを実行します。
sbt test
[info] Loading global plugins from /Users/username/.sbt/0.13/plugins
[info] Loading project definition from /Users/username/workspace/sandbox/my-something-project/project
[info] Set current project to scalatest-example (in build file:/Users/username/workspace/sandbox/my-something-project/)
[info] CubeCalculatorTest:
[info] - CubeCalculator.cube
[info] Run completed in 267 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 1 s, completed Feb 2, 2017 7:37:31 PM
テストを理解
- テキストエディタで2つのファイルを開きます。
src/main/scala/CubeCalculator.scalasrc/test/scala/CubeCalculatorTest.scala
CubeCalculator.scalaファイルでは、関数cubeがどのように定義されているかが分かります。CubeCalculatorTest.scalaファイルでは、テスト対象オブジェクトにちなんで名前を付けられたクラスが見えます。
import org.scalatest.FunSuite
class CubeCalculatorTest extends FunSuite {
test("CubeCalculator.cube") {
assert(CubeCalculator.cube(3) === 27)
}
}
一行ずつ詳細に調べていきましょう。
class CubeCalculatorTestは、オブジェクトCubeCalculatorをテストすることを意味します。extends FunSuiteにより、ScalaTest の FunSuite クラスの機能(例えばtest関数)が使えるようになります。testは FunSuite から来た関数で、関数本体内のアサーションの結果を収集します。"CubeCalculator.cube"は、テストの名前です。 どんな名前でもよいですが、慣例のひとつは “ClassName.methodName” です。assertは、真偽値の条件を1つ受けとり、そのテストが合格するか失敗するかを判断します。CubeCalculator.cube(3) === 27はcube関数の結果が実際に 27 であるかどうかを調べます。===は ScalaTest の一部であり、きれいなエラーメッセージを提供します。
テストケースを追加する
- 1つ目の
assert句のあとにもう1つの句を追加し、0の3乗をチェックします。 sbt testを再び実行し、結果を見ます。
結び
Scala コードのテスト方法のひとつを見ました。 ScalaTest の FunSuite については公式ウェブサイトで詳しく学べます。