Les proves són una part essencial del desenvolupament de programari, ja que asseguren que el codi funcioni com s'espera i ajuden a detectar errors abans que arribin a producció. Django proporciona un conjunt d'eines per facilitar la creació i execució de proves.
Continguts
Introducció a les Proves en Django
Django utilitza el mòdul unittest
de Python per a les proves. Aquest mòdul proporciona una estructura per crear i organitzar proves, així com per executar-les i informar dels resultats.
Beneficis de les Proves
- Detecció d'Errors: Identificar errors abans que arribin a producció.
- Refactorització Segura: Permet canviar el codi amb confiança, sabent que les proves detectaran qualsevol error introduït.
- Documentació: Les proves poden servir com a documentació del comportament esperat del codi.
Configuració del Marc de Proves
Django ve amb una configuració de proves per defecte que es pot utilitzar immediatament. No obstant això, és possible que vulguis personalitzar aquesta configuració segons les necessitats del teu projecte.
Configuració Bàsica
Per defecte, Django utilitza una base de dades SQLite en memòria per executar les proves. Aquesta configuració es pot trobar al fitxer settings.py
del teu projecte:
# settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', } }
Creació de Proves Unitàries
Les proves unitàries són proves que verifiquen el funcionament d'unitats individuals de codi, com ara funcions o mètodes.
Exemple de Prova Unitària
A continuació es mostra un exemple de prova unitària per a una funció que suma dos nombres:
# tests.py from django.test import TestCase def suma(a, b): return a + b class SumaTests(TestCase): def test_suma(self): self.assertEqual(suma(1, 2), 3) self.assertEqual(suma(-1, 1), 0) self.assertEqual(suma(0, 0), 0)
Explicació del Codi
- Importació de TestCase:
TestCase
és una classe base proporcionada per Django per crear proves. - Definició de la Funció: La funció
suma
suma dos nombres. - Creació de la Classe de Proves:
SumaTests
és una classe que hereta deTestCase
. - Definició de la Prova:
test_suma
és un mètode que conté les proves per a la funciósuma
.
Proves de Vistes
Les proves de vistes verifiquen que les vistes del teu projecte funcionin correctament.
Exemple de Prova de Vista
A continuació es mostra un exemple de prova per a una vista que retorna una pàgina d'inici:
# views.py from django.http import HttpResponse def home(request): return HttpResponse("Pàgina d'inici") # tests.py from django.test import TestCase from django.urls import reverse class HomeViewTests(TestCase): def test_home_view(self): response = self.client.get(reverse('home')) self.assertEqual(response.status_code, 200) self.assertContains(response, "Pàgina d'inici")
Explicació del Codi
- Definició de la Vista: La vista
home
retorna una resposta HTTP amb el text "Pàgina d'inici". - Prova de la Vista:
HomeViewTests
és una classe de proves per a la vistahome
. La provatest_home_view
verifica que la vista retorni un codi d'estat 200 i contingui el text "Pàgina d'inici".
Proves de Models
Les proves de models verifiquen que els models del teu projecte funcionin correctament.
Exemple de Prova de Model
A continuació es mostra un exemple de prova per a un model de llibre:
# models.py from django.db import models class Llibre(models.Model): titol = models.CharField(max_length=100) autor = models.CharField(max_length=100) # tests.py from django.test import TestCase from .models import Llibre class LlibreModelTests(TestCase): def test_creacio_llibre(self): llibre = Llibre.objects.create(titol="El Quixot", autor="Miguel de Cervantes") self.assertEqual(llibre.titol, "El Quixot") self.assertEqual(llibre.autor, "Miguel de Cervantes")
Explicació del Codi
- Definició del Model: El model
Llibre
té dos camps:titol
iautor
. - Prova del Model:
LlibreModelTests
és una classe de proves per al modelLlibre
. La provatest_creacio_llibre
verifica que es pugui crear un llibre amb els camps especificats.
Proves d'Integració
Les proves d'integració verifiquen que diferents parts del sistema funcionin correctament conjuntament.
Exemple de Prova d'Integració
A continuació es mostra un exemple de prova d'integració que verifica la interacció entre una vista i un model:
# views.py from django.shortcuts import render from .models import Llibre def llista_llibres(request): llibres = Llibre.objects.all() return render(request, 'llista_llibres.html', {'llibres': llibres}) # tests.py from django.test import TestCase from django.urls import reverse from .models import Llibre class LlistaLlibresViewTests(TestCase): def test_llista_llibres_view(self): Llibre.objects.create(titol="El Quixot", autor="Miguel de Cervantes") response = self.client.get(reverse('llista_llibres')) self.assertEqual(response.status_code, 200) self.assertContains(response, "El Quixot")
Explicació del Codi
- Definició de la Vista: La vista
llista_llibres
obté tots els llibres de la base de dades i els passa a una plantilla. - Prova d'Integració:
LlistaLlibresViewTests
és una classe de proves per a la vistallista_llibres
. La provatest_llista_llibres_view
verifica que la vista retorni un codi d'estat 200 i contingui el títol del llibre creat.
Execució de les Proves
Per executar les proves, utilitza el següent comandament:
Aquest comandament executarà totes les proves definides en el teu projecte i mostrarà els resultats.
Consells i Errors Comuns
Consells
- Escriu Proves Regularment: Escriu proves mentre desenvolupes el codi, no esperis fins al final.
- Utilitza Noms Descriptius: Dona noms descriptius a les teves proves per facilitar la comprensió del que estan provant.
- Prova Casos Extrems: Assegura't de provar casos extrems i situacions inusuals.
Errors Comuns
- No Provar Suficientment: No escriure prou proves o no cobrir tots els casos possibles.
- Proves Dependents: Crear proves que depenen d'altres proves o de l'ordre d'execució.
- No Mantenir les Proves: No actualitzar les proves quan es canvia el codi.
Conclusió
Les proves són una part fonamental del desenvolupament de programari amb Django. Proporcionen una manera de verificar que el codi funcioni correctament i ajuden a detectar errors abans que arribin a producció. En aquest tema, hem vist com configurar el marc de proves de Django, crear proves unitàries, de vistes, de models i d'integració, així com consells i errors comuns a evitar. Amb aquestes eines i coneixements, estaràs ben preparat per escriure proves efectives per al teu projecte Django.
Curs de Desenvolupament Web amb Django
Mòdul 1: Introducció a Django
- Què és Django?
- Configuració de l'Entorn de Desenvolupament
- Creació del teu Primer Projecte Django
- Comprensió de l'Estructura del Projecte Django
Mòdul 2: Conceptes Bàsics de Django
- Aplicacions Django i Estructura del Projecte
- Enrutament d'URL i Vistes
- Plantilles i Fitxers Estàtics
- Models i Bases de Dades
- Interfície d'Administració de Django
Mòdul 3: Django Intermedi
Mòdul 4: Django Avançat
- Consultes Avançades amb Django ORM
- Models d'Usuari Personalitzats
- Senyalitzacions de Django
- Proves en Django
- Optimització del Rendiment