Scala for Backend Engineering & Functional Programming · Lezione

Matcher

Asserzioni espressive

Lezione 2 di 413 passaggi

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 Matchers per usare la DSL;
  • uguaglianza: shouldBe, should equal; confronti con be >, +- tolerance;
  • stringhe: startWith, include; collezioni: have size, contain;
  • eccezioni: should be thrownBy;
  • i matcher producono errori chiari e descrittivi.
Gratis per iniziare

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.

Tutte le lezioni di questo corso

  1. Stili di ScalaTest
  2. Matcher
  3. Test basati sulle proprietà
  4. Mock e fixture
← Torna a Scala for Backend Engineering & Functional Programming