Asserzioni
Esprima il comportamento atteso.
Asserzioni è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 3 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 Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Cosa fanno le asserzioni
Un'asserzione è il cuore di un test. Afferma un fatto che deve essere vero. Se lo è, il test continua. In caso contrario, busted registra un fallimento con un messaggio utile.
busted utilizza la libreria luassert, accessibile tramite la tabella globale assert.
assert.are.equal(4, 2 + 2)are.equal
assert.are.equal verifica l'uguaglianza con l'operatore ==. Il primo argomento è il valore atteso, il secondo è il valore effettivo.
Funziona con numeri, stringhe e valori booleani, ma con le tabelle confronta l'identità, non il contenuto.
assert.are.equal("hello", greet())
assert.are.equal(10, count)are.same per le tabelle
Per confrontare in profondità il contenuto delle tabelle, utilizzi assert.are.same. Verifica ricorsivamente che due tabelle contengano valori uguali.
Utilizzi same per le strutture dati ed equal per i primitivi o i controlli di identità.
assert.are.same({1, 2, 3}, split("1,2,3"))
assert.are.same({x = 1}, point)Valori truthy
assert.is_true e assert.is_false verificano che il valore sia esattamente un booleano. assert.is_truthy accetta qualsiasi valore diverso da nil o false.
Scelga la variante rigorosa quando si aspetta specificamente un risultato booleano.
assert.is_true(user.active)
assert.is_truthy(find("x"))
assert.is_false(list:isEmpty())Controlli di nil
assert.is_nil verifica che un valore sia nil, mentre assert.is_not_nil verifica che sia presente. Sono controlli comuni quando si verificano i risultati delle ricerche.
Rendono l'intento più chiaro rispetto al confronto con nil tramite equal.
assert.is_nil(map["missing"])
assert.is_not_nil(map["found"])Negazione con is_not
La maggior parte delle asserzioni può essere negata inserendo is_not o utilizzando la forma are_not. In questo modo si esprime che due elementi devono essere diversi.
Per esempio, assert.are_not.equal ha esito positivo quando i due valori sono diversi.
assert.are_not.equal(1, 2)
assert.is_not_nil(result)Test degli errori
Per verificare che il codice generi un errore, lo racchiuda in una funzione e la passi a assert.has_error. busted chiama la funzione e conferma che abbia generato un errore.
Può anche verificare il messaggio di errore passando una stringa attesa come secondo argomento.
assert.has_error(function()
withdraw(-5)
end, "amount must be positive")has_no.errors
Il controllo opposto è assert.has_no.errors. Ha esito positivo quando la funzione racchiusa viene eseguita senza generare errori.
È utile per confermare che un percorso di esecuzione normale non vada in errore, anche quando non verifica il valore restituito.
assert.has_no.errors(function()
parse("valid input")
end)Messaggi di errore personalizzati
Può associare un messaggio alla maggior parte delle asserzioni per rendere più chiaro il motivo di un errore. Lo passi come argomento aggiuntivo, in modo che il report spieghi l'aspettativa.
Messaggi chiari trasformano un errore criptico in un'indicazione utile per intervenire.
assert.is_true(ok, "login should succeed")Corrispondenza con i modificatori
luassert fornisce modificatori e matcher per controlli più avanzati. Per esempio, assert.matches verifica una stringa rispetto a un pattern Lua.
È utile quando un controllo di uguaglianza esatta è troppo rigido per un output variabile.
assert.matches("%d%d%d%d", get_year())
assert.matches("error", log_line, 1, true)Scelta dell'asserzione corretta
Scelga l'asserzione più specifica per rendere il codice chiaro. Utilizzi same per le tabelle, equal per i primitivi, has_error per gli errori e i controlli di truthiness per i valori booleani.
Le asserzioni specifiche producono messaggi di errore migliori e velocizzano il debugging.
describe("queue", function()
it("dequeues in order", function()
assert.are.same({"a", "b"}, q:drain())
end)
end)Verifica rapida
Verifichi la sua comprensione delle asserzioni di busted.
Riepilogo
luassert fornisce la tabella assert di busted. Utilizzi are.equal per i primitivi, are.same per il confronto approfondito delle tabelle e i controlli di truthiness o di nil quando appropriato.
Verifichi gli errori con has_error e i casi riusciti con has_no.errors. Nega le asserzioni con is_not e aggiunga messaggi per ottenere report più chiari.
Domande Frequenti
La lezione «Asserzioni» è gratuita?
Sì — il testo completo di «Asserzioni» è 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 Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Asserzioni»?
Esprima il comportamento atteso. Eserciti Lua Academy 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 Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Asserzioni»?
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 Lua Academy?
Sì. Ogni lezione Lua Academy 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.