Testiamo i modelli
Testare la nostra applicazione è necessario per avere una applicazione funzionante adesso quando la scriviamo e nel futuro.
Per prima cosa quindi andiamo a creare la directory che ospiterà i file dei nostri test e creiamo il file per contenere i test per i modelli:
mkdir corsi/tests
touch corsi/tests/__init__.py
git mv corsi/tests.py corsi/tests/test_models.py
Apriamo il file corsi/tests/test_models.py
con il nostro editor e cominciamo a scrivere dei test per il
modello Categoria
:
from django.test import TestCase
from corsi.models import Categoria
class CategoriaTestCase(TestCase):
def test_posso_creare_categoria(self):
categoria = Categoria.objects.create(titolo="titolo")
self.assertTrue(categoria)
def test_posso_stampare_categoria(self):
categoria = Categoria.objects.create(titolo="titolo")
self.assertEqual(str(categoria), "titolo")
def test_categoria_mantiene_la_data_di_creazione(self):
categoria = Categoria.objects.create(titolo="titolo")
self.assertTrue(categoria.creato)
data_creazione = categoria.creato
categoria.save()
self.assertEqual(categoria.creato, data_creazione)
def test_categoria_aggiorna_la_data_di_aggiornamento(self):
categoria = Categoria.objects.create(titolo="titolo")
self.assertTrue(categoria.aggiornato)
data_aggiornamento = categoria.aggiornato
categoria.save()
self.assertGreater(categoria.aggiornato, data_aggiornamento)
Il sistema di testing di Django estende quello della libreria standard di Python chiamato
unittest. Il runner dei test di Django esegue i test
presenti nella directory tests
della nostra applicazione presenti in file il cui nome inizia per
test
.
I test vengono raggruppati in classi che ereditano da TestCase
, i singoli test sono implementati
come metodi di questa classe ed il loro nome deve cominciare con test_
. Ogni test viene eseguito
in una transazione del database che poi viene annullata, quindi le query fatte durante ogni test non
inficiano gli altri. I test usano un database diverso rispetto a quello usato dal progetto, per default
viene usato come nome quello configurato in settings.py
prefissato da test_.
Facciamo girare i test con il comando:
python3 manage.py test
Quindi salviamo i nostri progressi:
git add corsi/tests
git commit -m "Aggiungiamo test per il modello Categoria"
git push origin main
Esercizi
Scrivi dei test analoghi per il modello Corso
, salvali su git e pubblicali su GitHub.
Leggi l'overview sui test di Django.
Scopri nella documentazione come puoi far eseguire un singolo test.
Consulta la lista degli assert del
modulo unittest
di Python.