Scala には複数のライブラリとテスト方法がありますが、このチュートリアルでは、ScalaTest フレームワークから FunSuite という人気のある選択肢を実演します。
Intellij で sbt を使って Scala プロジェクトをビルドする方法を知っている前提とします。
セットアップ
- Intellij で sbt プロジェクトを作成します。
- ScalaTest への依存を追加します。
build.sbtファイルに ScalaTest への依存を追加します。libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % Testbuild.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 については公式ウェブサイトで詳しく学べます。