Matcher
Asserzioni espressive
Matcher è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Che cosa sono i matcher?
I matcher di ScalaTest forniscono una sintassi espressiva, simile all'inglese, per le asserzioni. Invece di assert(x == 3), scrivi x shouldBe 3, ottenendo test leggibili e messaggi di errore chiari.
Integrare i matcher
Integra il trait Matchers nella tua spec per abilitare la DSL. È compatibile con qualsiasi stile di testing.
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
}
}Matcher di uguaglianza
Verifica l'uguaglianza con shouldBe o should equal. Entrambi confrontano usando ==, ma si leggono in modo naturale.
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)
}
}Matcher di confronto
I confronti numerici si leggono come una frase: should be >, should be <= e, per gli intervalli con numeri in virgola mobile, be within per gestire la tolleranza.
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
}
}Matcher per stringhe
I matcher per le stringhe includono startWith, endWith, include e le espressioni regolari con 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")
}
}Matcher per collezioni
Esamina le collezioni in modo fluido: have size, contain, contain allOf e, per verificare che siano vuote, 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
}
}Matcher per Boolean e Option
Verifica direttamente i valori booleani e il contenuto di Option: shouldBe true, shouldBe defined e should contain per il valore contenuto.
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
}
}Combinare i matcher
Combina le aspettative con and / or per creare asserzioni composte.
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)
}
}Testare le eccezioni
Usa an [Exception] should be thrownBy { ... } o assertThrows per verificare che il codice fallisca come previsto.
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)
}
}Perché i matcher sono utili
Oltre a migliorare la leggibilità, i matcher producono messaggi di errore descrittivi. Un List(1,2) should have size 3 fallito riporta la dimensione attesa e quella effettiva, a differenza di un semplice assert, che indica solo che il valore booleano era false.
shouldBe vs should equal
Sono quasi identici; shouldBe è più conciso e produce messaggi leggermente più chiari per le semplici uguaglianze, mentre should equal supporta istanze Equality personalizzate per confronti avanzati.
Controllo rapido
Verifica la tua conoscenza dei matcher.
Riepilogo
Hai imparato i matcher di ScalaTest:
- integra
Matchersper usare la DSL; - uguaglianza:
shouldBe,should equal; confronti conbe >,+- tolerance; - stringhe:
startWith,include; collezioni:have size,contain; - eccezioni:
should be thrownBy; - i matcher producono errori chiari e descrittivi.
Impara Scala con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 39
- Lezioni
- 143
Domande Frequenti
La lezione «Matcher» è gratuita?
Sì — il testo completo di «Matcher» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 4 lezioni in totale.
Cosa imparerò in «Matcher»?
Asserzioni espressive Eserciti Scala for Backend Engineering & Functional Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Scala for Backend Engineering & Functional Programming?
Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Matcher»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Scala for Backend Engineering & Functional Programming?
Sì. Ogni lezione Scala for Backend Engineering & Functional Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.