0Pricing
Scala for Backend Engineering & Functional Programming · Lekcja

Matchery

Ekspresyjne asercje

Matchery to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 2 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 są matchery?

Matchery ScalaTest zapewniają ekspresyjną składnię asercji przypominającą język angielski. Zamiast assert(x == 3) piszesz x shouldBe 3, uzyskując czytelne testy i jasne komunikaty o błędach.

Dodawanie matcherów

Dodaj trait Matchers do swojej specyfikacji, aby odblokować DSL. Można go łączyć z dowolnym stylem testowania.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class DemoSpec extends AnyFlatSpec with Matchers {
  "A value" should "equal itself" in {
    val x = 3
    x shouldBe 3
  }
}

Matchery równości

Równość sprawdzaj za pomocą shouldBe lub should equal. Oba warianty porównują wartości za pomocą ==, ale czyta się je naturalnie.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class EqSpec extends AnyFlatSpec with Matchers {
  "sum" should "be correct" in {
    (2 + 2) shouldBe 4
    (2 + 2) should equal (4)
  }
}

Matchery porównań

Porównania liczbowe czyta się jak tekst: should be >, should be <=, a zakresy z tolerancją dla liczb zmiennoprzecinkowych za pomocą be within.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class CmpSpec extends AnyFlatSpec with Matchers {
  "a number" should "compare" in {
    7 should be > 3
    7 should be <= 7
    2.0 shouldBe 2.0 +- 0.01
  }
}

Matchery ciągów znaków

Matchery dla ciągów znaków obejmują startWith, endWith, include oraz wyrażenia regularne z użyciem fullyMatch regex.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class StrSpec extends AnyFlatSpec with Matchers {
  "a string" should "match parts" in {
    "hello world" should startWith ("hello")
    "hello world" should include ("o w")
    "hello world" should endWith ("world")
  }
}

Matchery kolekcji

Sprawdzaj kolekcje w płynny sposób: have size, contain, contain allOf, a pustkę za pomocą shouldBe empty.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class ColSpec extends AnyFlatSpec with Matchers {
  "a list" should "have expected contents" in {
    List(1, 2, 3) should have size 3
    List(1, 2, 3) should contain (2)
    List.empty[Int] shouldBe empty
  }
}

Matchery wartości Boolean i Option

Sprawdzaj bezpośrednio wartości logiczne i zawartość Option: shouldBe true, shouldBe defined oraz should contain dla wartości wewnętrznej.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class OptSpec extends AnyFlatSpec with Matchers {
  "an option" should "be inspected" in {
    Some(5) shouldBe defined
    Some(5) should contain (5)
    None shouldBe empty
  }
}

Łączenie matcherów

Łącz oczekiwania za pomocą and/or, tworząc złożone asercje.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class CombineSpec extends AnyFlatSpec with Matchers {
  "a number" should "satisfy both" in {
    7 should (be > 0 and be < 10)
  }
}

Testowanie wyjątków

Użyj an [Exception] should be thrownBy { ... } lub assertThrows, aby sprawdzić, czy kod kończy się oczekiwanym błędem.

import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers

class ExSpec extends AnyFlatSpec with Matchers {
  "dividing by zero" should "throw" in {
    an [ArithmeticException] should be thrownBy (1 / 0)
  }
}

Dlaczego matchery pomagają

Oprócz poprawy czytelności matchery tworzą opisowe komunikaty o błędach. Nieudane List(1,2) should have size 3 zgłasza oczekiwany i rzeczywisty rozmiar, w przeciwieństwie do zwykłego assert, który informuje jedynie, że wartość logiczna wynosiła false.

shouldBe a should equal

Są niemal identyczne; shouldBe jest krótsze i daje nieco czytelniejsze komunikaty przy prostej równości, natomiast should equal obsługuje niestandardowe instancje Equality do zaawansowanych porównań.

Szybki sprawdzian

Sprawdź swoją wiedzę o matcherach.

Podsumowanie

Nauczyłeś się korzystać z matcherów ScalaTest:

  • Dodaj Matchers, aby uzyskać DSL.
  • Równość: shouldBe, should equal; porównania z użyciem be >, +- tolerance.
  • Ciągi: startWith, include; kolekcje: have size, contain.
  • Wyjątki: should be thrownBy.
  • Matchery zapewniają jasne i opisowe komunikaty o niepowodzeniach.

Często zadawane pytania

Czy lekcja „Matchery” jest bezpłatna?

Tak — pełny tekst „Matchery” 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 „Matchery”?

Ekspresyjne asercje Ć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 2 z 4.

Ile czasu zajmuje lekcja „Matchery”?

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