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 de TestCase.
  • 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 vista home. La prova test_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 i autor.
  • Prova del Model: LlibreModelTests és una classe de proves per al model Llibre. La prova test_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 vista llista_llibres. La prova test_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:

python manage.py test

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.

© Copyright 2024. Tots els drets reservats