0Pricing
Scala for Backend Engineering & Functional Programming · Урок

Стили ScalaTest

FlatSpec и FunSuite

«Стили ScalaTest» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

What is ScalaTest?

ScalaTest is the most widely used testing framework for Scala. A distinctive feature is that it offers multiple testing styles, letting teams choose the syntax that fits their background.

Adding the Dependency

You add ScalaTest as a test dependency in build.sbt. The % Test scope keeps it out of your production artifact.

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

Why Multiple Styles?

Different teams prefer different conventions: xUnit veterans like FunSuite; behavior-driven teams like FlatSpec or WordSpec. ScalaTest supports them all on one engine, so you pick a style per project for consistency.

AnyFunSuite

AnyFunSuite uses a test("name") { ... } form, familiar to JUnit users. Each test block is one test case.

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 reads like a specification: "A Stack" should "pop values" in { ... }. The subject and behavior form a readable sentence.

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 vs must

In FlatSpec you can use should, must, or can as the verb. They are interchangeable in meaning; teams pick one for consistency.

import org.scalatest.flatspec.AnyFlatSpec

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

it and they

After naming a subject once, follow up with it (or they) to add more behaviors for the same subject without repeating its name.

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 groups tests with nested describe blocks and it clauses, giving hierarchical, readable output.

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 and Ignored Tests

Mark unfinished tests as pending, or skip one by using ignore instead of test/in. Both keep the suite green while signaling work to do.

import org.scalatest.funsuite.AnyFunSuite

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

Choosing a Style

Guidance:

  • FunSuite — minimal, xUnit-like, great for unit tests.
  • FlatSpec — readable behavior sentences.
  • FunSpec/WordSpec — nested, spec-style grouping.

Pick one per codebase and stay consistent.

Running the Tests

Run all tests with sbt test, or a single suite with sbt "testOnly *CalculatorSpec". ScalaTest reports each test name and outcome.

sbt test
sbt "testOnly *CalculatorSpec"

Quick Check

Test your knowledge of ScalaTest styles.

Recap

You learned ScalaTest styles:

  • Add ScalaTest with % Test scope.
  • AnyFunSuite: test("...") { } blocks.
  • AnyFlatSpec: subject should behavior in { }.
  • AnyFunSpec: nested describe/it.
  • Pick one style per project; run with sbt test.

Часто задаваемые вопросы

Урок «Стили ScalaTest» бесплатный?

Да — полный текст урока «Стили ScalaTest» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс 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/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?

Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Стили ScalaTest»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?

Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Стили ScalaTest
  2. Сопоставители
  3. Тестирование на основе свойств
  4. Моки и фикстуры
← Назад к Scala for Backend Engineering & Functional Programming