Scala for Backend Engineering & Functional Programming · Lezione

Stili di ScalaTest

FlatSpec e FunSuite

Lezione 1 di 413 passaggi

Stili di ScalaTest è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 1 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 cos'è ScalaTest?

ScalaTest è il framework di testing più usato per Scala. Una caratteristica distintiva è il supporto a diversi stili di testing, che consente ai team di scegliere la sintassi più adatta alla propria esperienza.

Aggiungere la dipendenza

Aggiungi ScalaTest come dipendenza di test in build.sbt. Lo scope % Test impedisce che venga incluso nel tuo artifact di produzione.

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

Perché più stili?

Team diversi preferiscono convenzioni diverse: chi ha esperienza con xUnit apprezza FunSuite; i team orientati al behavior-driven development preferiscono FlatSpec o WordSpec. ScalaTest li supporta tutti con un unico motore, quindi puoi scegliere uno stile per progetto e mantenere la coerenza.

AnyFunSuite

AnyFunSuite usa la forma test("name") { ... }, familiare a chi usa JUnit. Ogni blocco test è un singolo caso di test.

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 si legge come una specifica: "A Stack" should "pop values" in { ... }. Il soggetto e il comportamento formano una frase leggibile.

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

In FlatSpec puoi usare should, must o can come verbo. Il significato è intercambiabile; i team ne scelgono uno per mantenere la coerenza.

import org.scalatest.flatspec.AnyFlatSpec

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

it e they

Dopo aver nominato un soggetto, usa it (o they) per aggiungere altri comportamenti allo stesso soggetto senza ripeterne il nome.

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 raggruppa i test con blocchi describe annidati e clausole it, producendo un output gerarchico e leggibile.

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

Test in sospeso e ignorati

Contrassegna i test non terminati come pending, oppure salta un test usando ignore al posto di test/in. Entrambe le opzioni mantengono la suite verde e segnalano il lavoro ancora da svolgere.

import org.scalatest.funsuite.AnyFunSuite

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

Scegliere uno stile

Indicazioni:

  • FunSuite — minimale, simile a xUnit, ottimo per gli unit test;
  • FlatSpec — frasi leggibili che descrivono i comportamenti;
  • FunSpec/WordSpec — raggruppamento annidato in stile specifica.

Scegline uno per il codebase e usalo in modo coerente.

Eseguire i test

Esegui tutti i test con sbt test, oppure una singola suite con sbt "testOnly *CalculatorSpec". ScalaTest riporta il nome e l'esito di ogni test.

sbt test
sbt "testOnly *CalculatorSpec"

Controllo rapido

Verifica la tua conoscenza degli stili di ScalaTest.

Riepilogo

Hai imparato gli stili di ScalaTest:

  • aggiungi ScalaTest con lo scope % Test;
  • AnyFunSuite: blocchi test("...") { };
  • AnyFlatSpec: soggetto should comportamento in { };
  • AnyFunSpec: describe/it annidati;
  • scegli uno stile per progetto ed esegui i test con sbt test.
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 «Stili di ScalaTest» è gratuita?

Sì — il testo completo di «Stili di ScalaTest» è 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 «Stili di ScalaTest»?

FlatSpec e FunSuite 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 1 di 4.

Quanto tempo richiede la lezione «Stili di ScalaTest»?

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