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.scala
src/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 については公式ウェブサイトで詳しく学べます。