SetUp et TearDown dans Unittest : Gestion des Environnements de Test
Les quatre phases d’un test :
- SetUp : préparation de l’environnement. Cela peut impliquer la création d’objets dans la base de données, la configuration d’états système comme le démarrage de services ou la mise en place de connexions à la base de données ;
- Act : exécution de la fonction ou des méthodes à tester ;
- Assert : vérification et validation des résultats par rapport aux résultats attendus ;
- TearDown : nettoyage après chaque test. Cela garantit que toute modification de l’environnement n’affecte pas les tests suivants.
SetUp et tearDown sont des phases optionnelles.
Implémentation de SetUp et TearDown
Les méthodes setUp et tearDown dans Unittest sont des méthodes d’instance appelées respectivement avant et après chaque méthode de test.
Considérons une classe Book avec des méthodes personnalisées __repr__ et sale.
class Book:
def __init__(self, title, author, amount):
self.title = title
self.author = author
self.amount = amount
def __repr__(self):
return f"<Book {self.title}, written by {self.author}, {self.amount} pieces>"
def sale(self):
if self.amount > 0:
self.amount -= 1
else:
return "This book sold out"
L’étape suivante consiste à définir les cas de test dans la classe TestBook.
import unittest
class TestBook(unittest.TestCase):
def setUp(self):
print("Setting up the environment for each test.")
self.book = Book("1984", "George Orwell", 2)
def tearDown(self):
print("Cleaning up after each test.")
del self.book
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
Après l’exécution du cas test_sale, le nombre de livres est réinitialisé à la valeur d’origine pour test_book_repr car la méthode setUp s’exécute avant chaque test.
SetUp et tearDown au niveau de la méthode garantissent que chaque test s’exécute dans un environnement propre, rendant les tests prévisibles et indépendants.
Implémentation de SetUpClass et TearDownClass
Ce sont des méthodes de classe qui s’exécutent une seule fois pour toute la classe, au début et à la fin de la suite de tests.
class TestBook(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""This code will run before all tests"""
print("Setting up the environment for all tests.")
cls.book = Book("1984", "George Orwell", 2)
@classmethod
def tearDownClass(cls):
"""This code will run after all tests"""
print("Cleaning up after all tests.")
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
# An AssertionError will occur because the amount was changed in the
# 'test_sale' and the book was not updated prior to this test.
SetUp et tearDown au niveau de la classe réduisent la surcharge liée à la préparation et au nettoyage de ressources coûteuses à créer et à détruire.
Swipe to start coding
Exercez-vous à utiliser les méthodes setUp et tearDown dans unittest en testant une classe Book.
- Définir une classe de test nommée
TestBookqui hérite deunittest.TestCase. - Implémenter une méthode
setUpqui crée une instance deBookavec le titre'1984', l'auteur'George Orwell'et la quantité2. L’assigner àself.book. - Implémenter une méthode
tearDownqui supprime l’instanceself.book. - Ajouter une méthode nommée
test_salequi :- Appelle la méthode
salesurself.bookdeux fois ; - Vérifie que le second appel retourne
'This book sold out'.
- Appelle la méthode
- Ajouter une méthode nommée
test_book_reprqui vérifie que la représentation sous forme de chaîne de caractères deself.bookest'<Book 1984, written by George Orwell, 2 pieces>'. - Utilisez exactement ces noms de fonctions et de classes pour que vos tests réussissent.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 3.13
SetUp et TearDown dans Unittest : Gestion des Environnements de Test
Glissez pour afficher le menu
Les quatre phases d’un test :
- SetUp : préparation de l’environnement. Cela peut impliquer la création d’objets dans la base de données, la configuration d’états système comme le démarrage de services ou la mise en place de connexions à la base de données ;
- Act : exécution de la fonction ou des méthodes à tester ;
- Assert : vérification et validation des résultats par rapport aux résultats attendus ;
- TearDown : nettoyage après chaque test. Cela garantit que toute modification de l’environnement n’affecte pas les tests suivants.
SetUp et tearDown sont des phases optionnelles.
Implémentation de SetUp et TearDown
Les méthodes setUp et tearDown dans Unittest sont des méthodes d’instance appelées respectivement avant et après chaque méthode de test.
Considérons une classe Book avec des méthodes personnalisées __repr__ et sale.
class Book:
def __init__(self, title, author, amount):
self.title = title
self.author = author
self.amount = amount
def __repr__(self):
return f"<Book {self.title}, written by {self.author}, {self.amount} pieces>"
def sale(self):
if self.amount > 0:
self.amount -= 1
else:
return "This book sold out"
L’étape suivante consiste à définir les cas de test dans la classe TestBook.
import unittest
class TestBook(unittest.TestCase):
def setUp(self):
print("Setting up the environment for each test.")
self.book = Book("1984", "George Orwell", 2)
def tearDown(self):
print("Cleaning up after each test.")
del self.book
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
Après l’exécution du cas test_sale, le nombre de livres est réinitialisé à la valeur d’origine pour test_book_repr car la méthode setUp s’exécute avant chaque test.
SetUp et tearDown au niveau de la méthode garantissent que chaque test s’exécute dans un environnement propre, rendant les tests prévisibles et indépendants.
Implémentation de SetUpClass et TearDownClass
Ce sont des méthodes de classe qui s’exécutent une seule fois pour toute la classe, au début et à la fin de la suite de tests.
class TestBook(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""This code will run before all tests"""
print("Setting up the environment for all tests.")
cls.book = Book("1984", "George Orwell", 2)
@classmethod
def tearDownClass(cls):
"""This code will run after all tests"""
print("Cleaning up after all tests.")
def test_sale(self):
self.book.sale()
assert self.book.sale() == "This book sold out"
def test_book_repr(self):
self.assertEqual(repr(self.book), "<Book 1984, written by George Orwell, 2 pieces>")
# An AssertionError will occur because the amount was changed in the
# 'test_sale' and the book was not updated prior to this test.
SetUp et tearDown au niveau de la classe réduisent la surcharge liée à la préparation et au nettoyage de ressources coûteuses à créer et à détruire.
Swipe to start coding
Exercez-vous à utiliser les méthodes setUp et tearDown dans unittest en testant une classe Book.
- Définir une classe de test nommée
TestBookqui hérite deunittest.TestCase. - Implémenter une méthode
setUpqui crée une instance deBookavec le titre'1984', l'auteur'George Orwell'et la quantité2. L’assigner àself.book. - Implémenter une méthode
tearDownqui supprime l’instanceself.book. - Ajouter une méthode nommée
test_salequi :- Appelle la méthode
salesurself.bookdeux fois ; - Vérifie que le second appel retourne
'This book sold out'.
- Appelle la méthode
- Ajouter une méthode nommée
test_book_reprqui vérifie que la représentation sous forme de chaîne de caractères deself.bookest'<Book 1984, written by George Orwell, 2 pieces>'. - Utilisez exactement ces noms de fonctions et de classes pour que vos tests réussissent.
Solution
Merci pour vos commentaires !
single