ScalaTest のスタイル
FlatSpec と FunSuite です。
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ScalaTest のスタイル
- Matchers
- プロパティベーステスト
- モックとフィクスチャ