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życiembe >,+- 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.