Scala for Backend Engineering & Functional Programming · レッスン

ScalaTest のスタイル

FlatSpec と FunSuite です。

レッスン 1/413 ステップ

「ScalaTest のスタイル」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

ScalaTestとは

ScalaTestは、Scalaで最も広く使われているテストフレームワークです。特徴的なのは、複数のテストスタイルを提供し、チームが自分たちの経験に合った構文を選べることです。

依存関係の追加

build.sbtで、ScalaTestをテスト依存関係として追加します。% Testスコープにより、ScalaTestが本番アーティファクトに含まれないようにできます。

libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.18" % Test

なぜ複数のスタイルがあるのか

チームによって好む規約は異なります。xUnitに慣れた開発者はFunSuiteを、ビヘイビア駆動のチームはFlatSpecやWordSpecを好みます。ScalaTestは1つのエンジンですべてをサポートするため、プロジェクトごとにスタイルを選んで一貫性を保てます。

AnyFunSuite

AnyFunSuiteはtest("name") { ... }形式を使うため、JUnitユーザーにはなじみやすいスタイルです。各testブロックが1つのテストケースになります。

import org.scalatest.funsuite.AnyFunSuite

class MathSuite extends AnyFunSuite {
  test("addition works") {
    assert(1 + 1 == 2)
  }

  test("multiplication works") {
    assert(2 * 3 == 6)
  }
}

AnyFlatSpec

AnyFlatSpecは仕様書のように読めます。"A Stack" should "pop values" in { ... }のように、対象と振る舞いが読みやすい文を構成します。

import org.scalatest.flatspec.AnyFlatSpec

class CalculatorSpec extends AnyFlatSpec {
  "A Calculator" should "add two numbers" in {
    assert(2 + 3 == 5)
  }

  it should "subtract two numbers" in {
    assert(5 - 2 == 3)
  }
}

shouldとmustの違い

FlatSpecでは、動詞としてshould、must、またはcanを使えます。意味は同じで、チームで一貫性を保つためにいずれか1つを選びます。

import org.scalatest.flatspec.AnyFlatSpec

class ParserSpec extends AnyFlatSpec {
  "A Parser" must "handle empty input" in {
    assert("".isEmpty)
  }
}

itとthey

対象を一度示した後は、it(またはthey)を使って、対象名を繰り返さずに同じ対象の振る舞いを追加できます。

import org.scalatest.flatspec.AnyFlatSpec

class ListSpec extends AnyFlatSpec {
  "A List" should "report its size" in {
    assert(List(1, 2, 3).size == 3)
  }
  it should "reverse correctly" in {
    assert(List(1, 2).reverse == List(2, 1))
  }
}

AnyFunSpec

AnyFunSpecは、ネストしたdescribeブロックとit節でテストをグループ化し、階層的で読みやすい出力を生成します。

import org.scalatest.funspec.AnyFunSpec

class SetSpec extends AnyFunSpec {
  describe("A Set") {
    describe("when empty") {
      it("has size 0") {
        assert(Set.empty[Int].size == 0)
      }
    }
  }
}

保留・無視するテスト

未完成のテストにはpendingを付けます。また、test/inの代わりにignoreを使うと、テストを1つスキップできます。どちらも、対応が必要な作業であることを示しながら、テストスイートを成功状態に保ちます。

import org.scalatest.funsuite.AnyFunSuite

class WipSuite extends AnyFunSuite {
  test("feature not done") {
    pending
  }
  ignore("flaky test") {
    assert(false)
  }
}

スタイルの選択

選択の指針:

  • FunSuite — 最小限でxUnitに近く、ユニットテストに適しています。
  • FlatSpec — 振る舞いを表す文を読みやすく記述できます。
  • FunSpec/WordSpec — ネストした仕様形式のグループ化に適しています。

コードベースごとに1つを選び、一貫して使ってください。

テストの実行

すべてのテストはsbt testで、単一のテストスイートはsbt "testOnly *CalculatorSpec"で実行します。ScalaTestは各テストの名前と結果を報告します。

sbt test
sbt "testOnly *CalculatorSpec"

クイックチェック

ScalaTestのスタイルについての知識を確認しましょう。

まとめ

ScalaTestのスタイルについて学びました。

  • % TestスコープでScalaTestを追加します。
  • AnyFunSuite:test("...") { }ブロックを使います。
  • AnyFlatSpec:対象should振る舞いin { }の形式です。
  • AnyFunSpec:describe/itをネストします。
  • プロジェクトごとに1つのスタイルを選び、sbt testで実行します。
無料で開始

AI チューターと学ぶ Scala — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
39
レッスン
143

よくある質問

「ScalaTest のスタイル」レッスンは無料ですか?

はい。「ScalaTest のスタイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。

「ScalaTest のスタイル」で何を学びますか?

FlatSpec と FunSuite です。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「ScalaTest のスタイル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?

はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ScalaTest のスタイル
  2. Matchers
  3. プロパティベーステスト
  4. モックとフィクスチャ
← Scala for Backend Engineering & Functional Programmingに戻る