Esercitazione su PyUnit: Python Framework di unit test (con esempio)

⚡ Riepilogo intelligente

Python Il test unitario verifica piccole porzioni di codice in isolamento per individuare tempestivamente i bug. Qui imparerai le tecniche di test unitario, il framework PyUnit (unittest), le sue classi principali, come progettare un caso di test e un esempio pratico.

  • 🧪 Che cosa è: I test unitari verificano piccole unità di codice isolate per individuare tempestivamente i bug.
  • 🔬 tecniche: TDD, stub e mock isolano il codice in modo che i test unitari siano indipendenti.
  • 🐍 Unità Py: PythonIl modulo unittest integrato (PyUnit) è una versione adattata di JUnit.
  • 🧱 Classi chiave: TestCase, TestSuite, TestLoader, TextTestRunner e TestResults.
  • 🤖 Aiuto tramite intelligenza artificiale: Strumenti di intelligenza artificiale come Copilot generano istantaneamente casi di test unitari.

Python Test unitari

Cos'è il test unitario?

Test unitari in Python viene fatto per identificare i bug nelle prime fasi di sviluppo dell'applicazione, quando i bug sono meno ricorrenti e meno costosi da correggere.

Uno unit test è un test a livello di codice con script progettato in Python per verificare una piccola “unità” di funzionalità. Il test unitario è un framework orientato agli oggetti basato su dispositivi di test.

Python Tecniche di test unitario

Python Il test unitario prevede principalmente il test di un particolare modulo senza accedere ad alcun codice dipendente. Gli sviluppatori possono utilizzare tecniche come stub e mock per separare il codice in "unità" ed eseguire test a livello di unità sui singoli pezzi.

  • TDD di sviluppo basato sui test: Il test unitario dovrebbe essere eseguito insieme a Pythone per questo gli sviluppatori utilizzano il metodo di sviluppo basato sui test. Nel metodo TDD, per prima cosa progetti Python Unit test e solo dopo si continua a scrivere il codice che implementerà questa funzionalità.
  • Stub e Mock: Sono due tecniche principali che simulano metodi falsi che vengono testati. UN mozzicone viene utilizzato per compilare alcune dipendenze richieste per il corretto funzionamento del test unitario. UN finto d'altra parte è un oggetto falso che esegue i test in cui mettiamo assert.

    Le intenzioni di entrambi i metodi sono le stesse per eliminare il test di tutte le dipendenze di una classe o funzione.

Python Quadro di test unitario

Per semplificare il processo di unit testing e migliorare la qualità del progetto, si consiglia il Python Quadro di test unitario. Il framework Unit Testing include

Python Tecniche di test unitario

  • Unità Py: PyUnit supporta dispositivi, casi di test, suite di test e un test runner per il test automatizzato del codice. In PyUnit, puoi organizzare i casi di test in suite con le stesse apparecchiature
  • Al naso: I plug-in integrati di Nose ti aiutano con l'acquisizione dell'output, la copertura del codice, i doctest, ecc. La sintassi di Nose è piuttosto semplice e riduce le barriere alla scrittura dei test. Si estende Python unittest per semplificare i test.
  • Doctest: Lo script di test di Doctest va in docstring con una piccola funzione in fondo al file. Doctest ti consente di testare il tuo codice eseguendo esempi inclusi nella documentazione e verificando che restituiscano i risultati attesi. Il caso d'uso di doctest è meno dettagliato e non rileva casi speciali. Sono utili come documentazione espressiva del caso d'uso principale di un modulo e dei suoi componenti.

Test unitari con PyUnit

Pyunit è un Python porto di JUnit. Come parte di Pyunit, nel modulo unittest ci sono cinque classi chiave.

Test unitari con PyUnit

  • Classe TestCase: La classe TestCase supporta le routine di test e fornisce gli hook per creare ciascuna routine e ripulirla successivamente
  • Classe TestSuite: Funziona come un contenitore di raccolta e può possedere più oggetti testcase e più oggetti testsuites
  • Classe TestLoader: questa classe carica casi di test e suite definiti localmente o da un file esterno. Emette oggetti di testsuite che possiedono quelle suite e quei casi
  • Classe TextTestRunner: Per eseguire i test prevede una piattaforma standard per eseguire i test
  • La classe TestResults: Offre un contenitore standard per i risultati dei test

Progettare un caso di test per Python Test utilizzando PyUnit

Uno unit test fornisce una classe base, test case, che può essere utilizzata per creare nuovi test case. Per progettare il caso di test, ci sono tre serie di metodi utilizzati

Progettare un caso di test per Python

unittest.TestCase

setUp()
teardown()

skipTest(aMesg:string)
fail(aMesg:string)

id():string
shortDescription():string

Nel primo set ci sono i ganci pre e post test. Il metodo setup() inizia prima di ogni routine di test, il metodo Teardown() dopo la routine.

Il secondo set di metodi controlla l'esecuzione del test. Entrambi i metodi accettano una stringa di messaggio come input ed entrambi annullano un test in corso. Ma il metodo skiptest() interrompe il test corrente mentre il metodo fail() lo fallisce completamente.

L'ultimo o il terzo metodo aiutano a determinare il test. Il metodo id() restituisce una stringa composta dal nome dell'oggetto testcase e della routine di test. E il metodo è breveDescription() restituisce il commento docstr all'inizio di ogni routine di test.

Python Esempio di test unitario

L'esempio seguente testa una semplice funzione add() con il modulo unittest. Ogni metodo con il prefisso test_ viene eseguito automaticamente e assertEqual verifica il risultato rispetto al valore atteso.

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

if __name__ == "__main__":
    unittest.main()

Salva il codice ed eseguilo con il comando python filename.py. Il runner dei test unitari riporta quanti test sono stati superati o falliti.

Vantaggi dell'uso Python Test unitari

  • Ti aiuta a rilevare i bug nelle prime fasi del ciclo di sviluppo
  • Ti aiuta a scrivere programmi migliori
  • Si sincronizza facilmente con altri metodi e strumenti di test
  • Avrà molti meno bug
  • È più facile modificarlo in futuro con conseguenze molto minori

DOMANDE FREQUENTI

Il test unitario verifica una piccola unità di codice, come una funzione, in isolamento. Permette di individuare i bug nelle prime fasi dello sviluppo, quando sono più economici e facili da correggere.

PyUnit è PythonIl framework di test unitario integrato, disponibile come modulo unittest. È una versione adattata di JUnit e supporta dispositivi di test, casi di test, suite e un sistema di esecuzione dei test.

Crea una sottoclasse di unittest.TestCase, scrivi metodi che iniziano con test_ e usa asserzioni come assertEqual al loro interno. Esegui il file con unittest.main() per eseguire tutti i test.

Il metodo setUp() viene eseguito prima di ogni metodo di test per preparare le fixture, mentre tearDown() viene eseguito dopo ogni test per ripulire. Insieme, mantengono i test indipendenti e ripetibili.

Gli stub forniscono dati fissi da cui dipende un test, mentre i mock sono oggetti fittizi su cui si effettuano delle asserzioni. Entrambi sostituiscono le dipendenze reali, consentendo di testare un'unità in isolamento.

Gli assistenti basati sull'intelligenza artificiale come GitHub Copilot generano casi di test unitari a partire da una funzione, suggeriscono casi limite e asserzioni e creano mock per le dipendenze mentre scrivi il codice.

Sì. Gli strumenti basati sull'intelligenza artificiale possono automatizzare la generazione di suite di test, produrre asserzioni per gli output attesi e aumentare la copertura del codice suggerendo test per i rami non testati.

unittest è PythonIl framework integrato di 's' utilizza classi e metodi assert, mentre pytest è una libreria di terze parti con istruzioni assert più semplici e potenti fixture. Entrambi eseguono unit test.

Riassumi questo post con: