Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Introduzione a Unittest in Python: Scrivere Test Unitari Strutturati | Padronanza del Framework Unittest
Programmazione Strutturale in Python

bookIntroduzione a Unittest in Python: Scrivere Test Unitari Strutturati

Unittest fa parte della libreria standard di Python, il che significa che non sono necessarie installazioni aggiuntive per iniziare. È progettato attorno al concetto di casi di test, che sono classi Python derivate dalla classe TestCase del framework. Unittest è uno strumento eccellente per chiunque inizi il proprio percorso nel testing, poiché struttura i test in modo da riflettere i principi della programmazione orientata agli oggetti.

La struttura di Unittest

In Unittest, ogni test è un metodo all'interno di una sottoclasse di unittest.TestCase. Questo design incoraggia il raggruppamento di test correlati, facilitando l'organizzazione logica del codice di test e rendendolo più leggibile.

Scrivere un test con Unittest

Testiamo una semplice funzione che calcola la media di due numeri. Ecco la funzione che vogliamo testare:

def calculate_average(num1, num2):
    return (num1 + num2) / 2

Creazione di un caso di test

Per creare un caso di test, è necessario definire una classe che eredita da unittest.TestCase. All'interno di questa classe, è possibile definire metodi per testare la funzione calculate_average.

import unittest

class TestCalculateAverage(unittest.TestCase):
    
    def test_integers(self):
        self.assertEqual(calculate_average(10, 20), 15)
    
    def test_floats(self):
        self.assertAlmostEqual(calculate_average(10.5, 20.5), 15.5)
  • Per prima cosa si import il modulo Unittest, che fa parte della libreria standard di Python;
  • class TestCalculateAverage(unittest.TestCase) crea un nuovo caso di test. Eredita da unittest.TestCase, che fornisce la funzionalità di testing;
  • Ogni metodo nella classe dovrebbe iniziare con test_;
  • I metodi utilizzano specifiche istruzioni assert per verificare se una condizione è vera.

Esempio di Output di Test Riuscito

Quando tutti i test vengono superati in Unittest, l'output è semplice e indica che tutti i test sono stati eseguiti con successo senza alcun errore. Ecco un esempio di esecuzione di test riuscita:

...
----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK

Esempio di Output di Test Fallito

Se uno o più test falliscono, l'output fornirà dettagli sui fallimenti, inclusi quali test sono falliti e il motivo. Ecco un esempio di come potrebbe apparire l'output quando un test fallisce:

..F
----------------------------------------------------------------------
Ran 3 tests in 0.003s

FAILED (failures=1)

======================================================================
FAIL: test_average_floats (test_module.TestCalculateAverage)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/path/to/test_module.py", line 10, in test_average_floats
    self.assertAlmostEqual(calculate_average(10.0, 20.0), 15.1)
AssertionError: 15.0 != 15.1 within 7 places (0.10000000000000142 difference)

----------------------------------------------------------------------

Questo output include:

  • ..F indica che sono stati eseguiti tre test; i primi due sono stati superati (rappresentati da ..), mentre il terzo è fallito (F);
  • FAILED (failures=1) mostra che c'è stato un fallimento tra i test eseguiti;
  • Il report dettagliato dell'errore inizia con l'identificatore del test (test_average_floats) e la classe (TestCalculateAverage). Fornisce un traceback alla riga del codice di test che ha causato il fallimento e spiega la natura dell'errore di asserzione, includendo il valore atteso, il valore effettivo e il margine di errore accettabile.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain what the different assert methods in Unittest do?

How do I run these tests from the command line?

What should I do if a test fails?

bookIntroduzione a Unittest in Python: Scrivere Test Unitari Strutturati

Scorri per mostrare il menu

Unittest fa parte della libreria standard di Python, il che significa che non sono necessarie installazioni aggiuntive per iniziare. È progettato attorno al concetto di casi di test, che sono classi Python derivate dalla classe TestCase del framework. Unittest è uno strumento eccellente per chiunque inizi il proprio percorso nel testing, poiché struttura i test in modo da riflettere i principi della programmazione orientata agli oggetti.

La struttura di Unittest

In Unittest, ogni test è un metodo all'interno di una sottoclasse di unittest.TestCase. Questo design incoraggia il raggruppamento di test correlati, facilitando l'organizzazione logica del codice di test e rendendolo più leggibile.

Scrivere un test con Unittest

Testiamo una semplice funzione che calcola la media di due numeri. Ecco la funzione che vogliamo testare:

def calculate_average(num1, num2):
    return (num1 + num2) / 2

Creazione di un caso di test

Per creare un caso di test, è necessario definire una classe che eredita da unittest.TestCase. All'interno di questa classe, è possibile definire metodi per testare la funzione calculate_average.

import unittest

class TestCalculateAverage(unittest.TestCase):
    
    def test_integers(self):
        self.assertEqual(calculate_average(10, 20), 15)
    
    def test_floats(self):
        self.assertAlmostEqual(calculate_average(10.5, 20.5), 15.5)
  • Per prima cosa si import il modulo Unittest, che fa parte della libreria standard di Python;
  • class TestCalculateAverage(unittest.TestCase) crea un nuovo caso di test. Eredita da unittest.TestCase, che fornisce la funzionalità di testing;
  • Ogni metodo nella classe dovrebbe iniziare con test_;
  • I metodi utilizzano specifiche istruzioni assert per verificare se una condizione è vera.

Esempio di Output di Test Riuscito

Quando tutti i test vengono superati in Unittest, l'output è semplice e indica che tutti i test sono stati eseguiti con successo senza alcun errore. Ecco un esempio di esecuzione di test riuscita:

...
----------------------------------------------------------------------
Ran 3 tests in 0.002s

OK

Esempio di Output di Test Fallito

Se uno o più test falliscono, l'output fornirà dettagli sui fallimenti, inclusi quali test sono falliti e il motivo. Ecco un esempio di come potrebbe apparire l'output quando un test fallisce:

..F
----------------------------------------------------------------------
Ran 3 tests in 0.003s

FAILED (failures=1)

======================================================================
FAIL: test_average_floats (test_module.TestCalculateAverage)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/path/to/test_module.py", line 10, in test_average_floats
    self.assertAlmostEqual(calculate_average(10.0, 20.0), 15.1)
AssertionError: 15.0 != 15.1 within 7 places (0.10000000000000142 difference)

----------------------------------------------------------------------

Questo output include:

  • ..F indica che sono stati eseguiti tre test; i primi due sono stati superati (rappresentati da ..), mentre il terzo è fallito (F);
  • FAILED (failures=1) mostra che c'è stato un fallimento tra i test eseguiti;
  • Il report dettagliato dell'errore inizia con l'identificatore del test (test_average_floats) e la classe (TestCalculateAverage). Fornisce un traceback alla riga del codice di test che ha causato il fallimento e spiega la natura dell'errore di asserzione, includendo il valore atteso, il valore effettivo e il margine di errore accettabile.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 5. Capitolo 1
some-alt