Tests avec des bases de données
Enfin, testons du code qui interagit avec une base de données. Pour cet exemple, nous utiliserons SQLite et le module sqlite3.
Dans my_code.py, créez une fonction nommée create_table qui crée une nouvelle table dans une base de données SQLite.
import sqlite3
def create_table():
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY, name TEXT)')
conn.commit()
conn.close()
Dans ce code, nous créons une nouvelle table de base de données SQLite nommée "my_table" avec deux colonnes : "id" et "name". Nous définissons ensuite une classe de test nommée TestCreateTable avec une méthode setUp qui crée une base de données SQLite pour les tests.
Maintenant, écrivons un test pour la fonction create_table. Tout d'abord, nous devons créer une nouvelle base de données pour les tests. Nous le ferons dans une méthode de configuration qui s'exécute avant chaque test.
class TestCreateTable(unittest.TestCase):
def setUp(self):
self.conn = sqlite3.connect('my_database.db')
def test_create_table(self):
create_table()
c = self.conn.cursor()
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='my_table'")
result = c.fetchone()
self.assertIsNotNone(result)
Dans la méthode setUp, nous créons une nouvelle base de données SQLite.
Dans la méthode test_create_table, nous appelons la fonction create_table puis vérifions que la table a été créée en utilisant une requête SQL.
Maintenant, nous pouvons exécuter nos tests à nouveau :
python -m unittest test_my_code.py
Si le test réussit, vous devriez voir une sortie similaire à la suivante :
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
Les ... indiquent que trois tests ont réussi.