0Pricing
Scala for Backend Engineering & Functional Programming · Lekcja

Style ScalaTest

FlatSpec i FunSuite

Style ScalaTest to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Scala for Backend Engineering & Functional Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Czym jest ScalaTest?

ScalaTest to najczęściej używany framework testowy dla Scali. Jego wyróżniającą cechą jest obsługa wielu stylów testowania, dzięki czemu zespoły mogą wybrać składnię pasującą do ich doświadczenia.

Dodawanie zależności

Dodajesz ScalaTest jako zależność testową w pliku build.sbt. Zakres % Test sprawia, że biblioteka nie trafia do artefaktu produkcyjnego.

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

Dlaczego wiele stylów?

Różne zespoły preferują różne konwencje: weterani xUnit lubią FunSuite, a zespoły stosujące podejście behavior-driven — FlatSpec lub WordSpec. ScalaTest obsługuje je wszystkie w jednym silniku, więc dla zachowania spójności wybierasz styl dla każdego projektu.

AnyFunSuite

AnyFunSuite używa formy test("name") { ... }, znanej użytkownikom JUnit. Każdy blok test jest jednym przypadkiem testowym.

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 przypomina specyfikację: "A Stack" should "pop values" in { ... }. Obiekt i jego zachowanie tworzą czytelne zdanie.

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

W FlatSpec jako czasownika możesz użyć should, must lub can. Ich znaczenie jest wymienne, więc zespoły wybierają jeden wariant dla zachowania spójności.

import org.scalatest.flatspec.AnyFlatSpec

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

it i they

Po jednokrotnym nazwaniu obiektu użyj it (lub they), aby dodać kolejne zachowania tego samego obiektu bez powtarzania jego nazwy.

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 grupuje testy za pomocą zagnieżdżonych bloków describe i klauzul it, zapewniając hierarchiczny i czytelny wynik.

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)
      }
    }
  }
}

Oczekujące i pomijane testy

Oznaczaj niedokończone testy jako pending albo pomijaj pojedynczy test, używając ignore zamiast test/in. Oba rozwiązania utrzymują zielony wynik zestawu testów, sygnalizując jednocześnie pozostałą pracę.

import org.scalatest.funsuite.AnyFunSuite

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

Wybór stylu

Wskazówki:

  • FunSuite — minimalny, podobny do xUnit, świetny do testów jednostkowych.
  • FlatSpec — czytelne zdania opisujące zachowanie.
  • FunSpec/WordSpec — zagnieżdżone grupowanie w stylu specyfikacji.

Wybierz jeden styl dla całej bazy kodu i zachowaj spójność.

Uruchamianie testów

Uruchom wszystkie testy za pomocą sbt test albo pojedynczy zestaw za pomocą sbt "testOnly *CalculatorSpec". ScalaTest raportuje nazwę i wynik każdego testu.

sbt test
sbt "testOnly *CalculatorSpec"

Szybki sprawdzian

Sprawdź swoją wiedzę o stylach ScalaTest.

Podsumowanie

Nauczyłeś się stylów ScalaTest:

  • Dodawaj ScalaTest z zakresem % Test.
  • AnyFunSuite: bloki test("...") { }.
  • AnyFlatSpec: obiekt should zachowanie in { }.
  • AnyFunSpec: zagnieżdżone describe/it.
  • Wybierz jeden styl dla projektu; uruchamiaj testy za pomocą sbt test.

Często zadawane pytania

Czy lekcja „Style ScalaTest” jest bezpłatna?

Tak — pełny tekst „Style ScalaTest” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Scala for Backend Engineering & Functional Programming, przejdź na CoddyKit PRO. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.

Co nauczysz się w „Style ScalaTest”?

FlatSpec i FunSuite Ćwiczysz Scala for Backend Engineering & Functional Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Scala for Backend Engineering & Functional Programming?

Nie wymagamy żadnego doświadczenia. Scala for Backend Engineering & Functional Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Style ScalaTest”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Scala for Backend Engineering & Functional Programming?

Tak. Każda lekcja Scala for Backend Engineering & Functional Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Style ScalaTest
  2. Matchery
  3. Testowanie oparte na właściwościach
  4. Mockowanie i fixture’y
← Powrót do Scala for Backend Engineering & Functional Programming