Scala には複数のライブラリとテスト方法がありますが、このチュートリアルでは、ScalaTest フレームワークから FunSuite という人気のある選択肢を実演します。
Intellij で sbt を使って Scala プロジェクトをビルドする方法を知っている前提とします。
セットアップ
- Intellij で sbt プロジェクトを作成します。
- ScalaTest への依存を追加します。
build.sbt
ファイルに ScalaTest への依存を追加します。libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % Test
build.sbt was changed
という通知が出たら、auto-import を選択します。- これらの2つのアクションにより、
sbt
が ScalaTest ライブラリをダウンロードします。 sbt
の同期完了を待ちます。そうしなければFunSuite
とtest()
は認識されません。
- 左のプロジェクトペインで、
src
=>main
を展開します。 scala
を右クリックし、New => Scala class を選択します。- クラスに
CubeCalculator
と名前をつけて、Kind をobject
に変更し、OK をクリックします。 - コードを次の通り置き換えます。
object CubeCalculator: def cube(x: Int) = x * x * x
テストを作成
- 左のプロジェクトペインで、
src
=>test
を展開します。 scala
を右クリックし、New => Scala class を選択します。- クラスに
CubeCalculatorTest
と名前を付けて、OK をクリックします。 - コードを次の通り置き換えます。
import org.scalatest.funsuite.AnyFunSuite class CubeCalculatorTest extends AnyFunSuite: test("CubeCalculator.cube") { assert(CubeCalculator.cube(3) === 27) }
CubeCalculatorTest
のソースコード内で右クリックし、Run ‘CubeCalculatorTest’ を選択します。
コードを理解
一行ずつ詳細に調べていきましょう。
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乗をチェックします。 CubeCalculatorTest
を右クリックして ‘Run CubeCalculatorTest’ を選ぶことで、テストを再実行します。
結び
Scala コードのテスト方法のひとつを見ました。 ScalaTest の FunSuite については公式ウェブサイトで詳しく学べます。