Diferencia entre revisiones de «Pruebas del Modelo 22-23»

De Wiki de EGC
Saltar a: navegación, buscar
(Página creada con « Las pruebas unitarias están destinadas a identificar errores en partes pequeñas de código con la idea de maximizar la cobertura de nuestros tests. Recordar que la funci...»)
 
 
Línea 1: Línea 1:
 +
Como vimos en las clase de teoría, para poder probar los elementos persistentes disponemos de las pruebas CRUD.
 +
Es importante conocer que en Django los tests no se ejecutan sobre la misma base de datos que la que usamos en producción, por lo que los elementos que creemos no permanecerán en nuestra instalación de producción.
  
Las pruebas unitarias están destinadas a identificar errores en partes pequeñas de código con la idea de maximizar la cobertura de nuestros tests. Recordar que la función de cobertura de las pruebas es algo que debemos decidir. Los tests de cada módulo se implementan en archivos python que comienzan por test*
+
<source>
 +
def setUp(self):
 +
        super().setUp()
 +
        self.census = Census(voting_id=1, voter_id=1)
 +
        self.census.save()
  
'''Ejercicio 1'''
+
def tearDown(self):
 +
        super().tearDown()
 +
        self.census = None
  
Lo primero que vamos a hacer es crear un nuevo test para el modulo de autenticación de decide donde en vez de probar la aplicación, comprobaremos que la suma de dos enteros es correcta.  
+
def test_store_census(self):
'''Nota''' esta prueba es para familiarizarnos con el framework. Aquí no estamos probando nuestra app Django.  
+
        self.assertEqual(Census.objects.count(), 1)
 +
</source>
  
 +
También hay otros métodos que se definen en los modelos y que puede tener sentido quere probar aunque no persistan datos, como por ejempo __str__ de voting. El siguiente método lo podemos añadir dentro de la clase de test de Voting y utilizar sus métodos auxiliares como el "create_voting()". Es método añade varias opciones con el nombre "opción ''i'' (''i+1'')"
  
 
<source>
 
<source>
from django.test import TestCase
+
def test_Voting_toString(self):
class SimpleTest(TestCase):
+
        v = self.create_voting()
def test_basic_addition(self):
+
        self.assertEquals(str(v),"test voting")
"""
+
        self.assertEquals(str(v.question),"test question")
Tests that 1 + 1 always equals 2.
+
        self.assertEquals(str(v.question.options.all()[0]),"option 1 (2)")
"""
+
 
self.assertEqual(1 + 1, 2)
 
 
</source>
 
</source>
  
Para ejecutar los tests deberemos ejecutar ./manage.py test authentication.
+
'''Ejercicio 1'''
 
 
'''Ejercicio 2'''
 
 
 
Para probar la cobertura de nuestras pruebas usaremos la aplicación coverage:
 
 
 
<source>
 
$ pip install coverage
 
</source>
 
  
Para lanzar el analisis de cobertura:
+
Implemente una prueba que cree una votación con una pregunta y dos opciones de respuesta.
<source>
 
coverage run --source . ./manage.py test -v 2
 
</source>
 
Añadimos la opción "--source ." para sólo analizar nuestro código de decide pero no las bibliotecas incluidas.
 
Añadimos la opción "-v 2" para hacer la salida más verbosa, es decir, ver más información sobre los tests.
 
Podemos añadir la opción "--keepdb" para evitar que la base de datos de prueba se borre al finalizar. Entre otras cosas, eso evitará que se tenga que crear la base de datos la próxima vez que vayan a correrse los test.
 
<source>
 
coverage html
 
</source>
 
Finalmente podemos ver el contenido del html abriendo "decide/htmlcov/index.html"
 
  
'''Ejercicio 3'''
+
[[link1]]
Pensar los tests que necesitaremos para nuestro proyecto decide.
 

Revisión actual del 09:14 4 oct 2022

Como vimos en las clase de teoría, para poder probar los elementos persistentes disponemos de las pruebas CRUD. Es importante conocer que en Django los tests no se ejecutan sobre la misma base de datos que la que usamos en producción, por lo que los elementos que creemos no permanecerán en nuestra instalación de producción.

def setUp(self):
        super().setUp()
        self.census = Census(voting_id=1, voter_id=1)
        self.census.save()

def tearDown(self):
        super().tearDown()
        self.census = None

def test_store_census(self):
        self.assertEqual(Census.objects.count(), 1)

También hay otros métodos que se definen en los modelos y que puede tener sentido quere probar aunque no persistan datos, como por ejempo __str__ de voting. El siguiente método lo podemos añadir dentro de la clase de test de Voting y utilizar sus métodos auxiliares como el "create_voting()". Es método añade varias opciones con el nombre "opción i (i+1)"

def test_Voting_toString(self):
        v = self.create_voting()
        self.assertEquals(str(v),"test voting")
        self.assertEquals(str(v.question),"test question")
        self.assertEquals(str(v.question.options.all()[0]),"option 1 (2)")

Ejercicio 1

Implemente una prueba que cree una votación con una pregunta y dos opciones de respuesta.

link1