Framework UnitTest - Assertion
Le framework de test Python utilise la fonction assert () intégrée de Python qui teste une condition particulière. Si l'assertion échoue, une AssertionError sera déclenchée. Le cadre de test identifiera alors le test comme un échec. Les autres exceptions sont traitées comme une erreur.
Les trois ensembles de fonctions d'assertion suivants sont définis dans le module unittest -
- Assertions booléennes de base
- Assertions comparatives
- Assertions pour les collections
Les fonctions d'assert de base évaluent si le résultat d'une opération est True ou False. Toutes les méthodes d'assert acceptent unmsg argument qui, s'il est spécifié, est utilisé comme message d'erreur en cas d'échec.
Sr.No. | Méthode et description |
---|---|
1 | assertEqual(arg1, arg2, msg = None) Testez que arg1 et arg2 sont égaux. Si les valeurs ne sont pas égales, le test échouera. |
2 | assertNotEqual(arg1, arg2, msg = None) Testez que arg1 et arg2 ne sont pas égaux. Si les valeurs se comparent égales, le test échouera. |
3 | assertTrue(expr, msg = None) Vérifiez que expr est vrai. Si faux, le test échoue |
4 | assertFalse(expr, msg = None) Vérifiez que expr est faux. Si vrai, le test échoue |
5 | assertIs(arg1, arg2, msg = None) Testez que arg1 et arg2 évaluent le même objet. |
6 | assertIsNot(arg1, arg2, msg = None) Testez que arg1 et arg2 ne correspondent pas au même objet. |
sept | assertIsNone(expr, msg = None) Testez que expr est None. Si non Aucun, le test échoue |
8 | assertIsNotNone(expr, msg = None) Testez que expr n'est pas None. Si aucun, le test échoue |
9 | assertIn(arg1, arg2, msg = None) Testez que arg1 est dans arg2 . |
dix | assertNotIn(arg1, arg2, msg = None) Testez que arg1 n'est pas dans arg2 . |
11 | assertIsInstance(obj, cls, msg = None) Tester que obj est une instance de cls |
12 | assertNotIsInstance(obj, cls, msg = None) Tester que obj n'est pas une instance de cls |
Certaines des fonctions d'assertion ci-dessus sont implémentées dans le code suivant -
import unittest
class SimpleTest(unittest.TestCase):
def test1(self):
self.assertEqual(4 + 5,9)
def test2(self):
self.assertNotEqual(5 * 2,10)
def test3(self):
self.assertTrue(4 + 5 == 9,"The result is False")
def test4(self):
self.assertTrue(4 + 5 == 10,"assertion fails")
def test5(self):
self.assertIn(3,[1,2,3])
def test6(self):
self.assertNotIn(3, range(5))
if __name__ == '__main__':
unittest.main()
Lorsque le script ci-dessus est exécuté, test2, test4 et test6 afficheront un échec et les autres s'exécuteront avec succès.
FAIL: test2 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python27\SimpleTest.py", line 9, in test2
self.assertNotEqual(5*2,10)
AssertionError: 10 == 10
FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python27\SimpleTest.py", line 13, in test4
self.assertTrue(4+5==10,"assertion fails")
AssertionError: assertion fails
FAIL: test6 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Python27\SimpleTest.py", line 17, in test6
self.assertNotIn(3, range(5))
AssertionError: 3 unexpectedly found in [0, 1, 2, 3, 4]
----------------------------------------------------------------------
Ran 6 tests in 0.001s
FAILED (failures = 3)
Le deuxième ensemble de fonctions d'assertion est comparative asserts −
assertAlmostEqual (premier, deuxième, places = 7, msg = Aucun, delta = Aucun)
Vérifiez que première et seconde sont à peu près (ou pas environ) correspondant en calculant la différence, arrondi au nombre donné de décimales endroits (par défaut 7),
assertNotAlmostEqual (premier, deuxième, lieux, msg, delta)
Vérifiez que le premier et le second ne sont pas à peu près égaux en calculant la différence, en arrondissant au nombre donné de décimales (7 par défaut) et en comparant à zéro.
Dans les deux fonctions ci-dessus, si delta est fourni au lieu de places, la différence entre le premier et le second doit être inférieure ou égale à (ou supérieure à) delta.
Fournir à la fois delta et places déclenche une TypeError.
assertGreater (premier, deuxième, msg = Aucun)
Vérifiez que le premier est supérieur à la seconde en fonction du nom de la méthode. Sinon, le test échouera.
assertGreaterEqual (premier, deuxième, msg = Aucun)
Vérifiez que le premier est supérieur ou égal à second en fonction du nom de la méthode. Sinon, le test échouera
assertLess (premier, deuxième, msg = Aucun)
Vérifiez que le premier est inférieur à la seconde selon le nom de la méthode. Sinon, le test échouera
assertLessEqual (premier, deuxième, msg = Aucun)
Vérifiez que le premier est inférieur ou égal à second en fonction du nom de la méthode. Sinon, le test échouera.
assertRegexpMatches (texte, expression régulière, msg = Aucun)
Vérifiez qu'une recherche d'expression régulière correspond au texte. En cas d'échec, le message d'erreur inclura le motif et le texte. regexp peut être un objet d'expression régulière ou une chaîne contenant une expression régulière pouvant être utilisée parre.search().
assertNotRegexpMatches (texte, expression régulière, msg = Aucun)
Vérifie qu'une recherche par expression régulière ne correspond pas au texte . Échoue avec un message d'erreur incluant le modèle et la partie de texte qui correspond. regexp peut être un objet d'expression régulière ou une chaîne contenant une expression régulière pouvant être utilisée par re.search () .
Les fonctions d'assertion sont implémentées dans l'exemple suivant -
import unittest
import math
import re
class SimpleTest(unittest.TestCase):
def test1(self):
self.assertAlmostEqual(22.0/7,3.14)
def test2(self):
self.assertNotAlmostEqual(10.0/3,3)
def test3(self):
self.assertGreater(math.pi,3)
def test4(self):
self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")
if __name__ == '__main__':
unittest.main()
Le script ci-dessus signale test1 et test4 comme un échec. Dans le test 1, la division de 22/7 n'est pas comprise entre 7 décimales et 3,14. De même, puisque le deuxième argument correspond au texte du premier argument, test4 aboutit à AssertionError.
=====================================================FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "asserttest.py", line 7, in test1
self.assertAlmostEqual(22.0/7,3.14)
AssertionError: 3.142857142857143 != 3.14 within 7 places
================================================================
FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "asserttest.py", line 13, in test4
self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")
AssertionError: Regexp matched: 'Point' matches 'Point' in 'Tutorials Point (I)
Private Limited'
----------------------------------------------------------------------
Ran 4 tests in 0.001s
FAILED (failures = 2)
Assert pour les collections
Cet ensemble de fonctions d'assert est destiné à être utilisé avec des types de données de collection en Python, tels que List, Tuple, Dictionary et Set.
Sr.No. | Méthode et description |
---|---|
1 | assertListEqual (list1, list2, msg = None) Teste que deux listes sont égales. Sinon, un message d'erreur est construit qui montre uniquement les différences entre les deux. |
2 | assertTupleEqual (tuple1, tuple2, msg = None) Teste que deux tuples sont égaux. Sinon, un message d'erreur est construit qui montre uniquement les différences entre les deux. |
3 | assertSetEqual (set1, set2, msg = None) Teste que deux ensembles sont égaux. Sinon, un message d'erreur est construit qui répertorie les différences entre les ensembles. |
4 | assertDictEqual (expected, actual, msg = None) Vérifiez que deux dictionnaires sont égaux. Sinon, un message d'erreur est construit qui montre les différences dans les dictionnaires. |
L'exemple suivant implémente les méthodes ci-dessus -
import unittest
class SimpleTest(unittest.TestCase):
def test1(self):
self.assertListEqual([2,3,4], [1,2,3,4,5])
def test2(self):
self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))
def test3(self):
self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})
if __name__ == '__main__':
unittest.main()
Dans l'exemple ci-dessus, test1 et test3 affichent AssertionError. Le message d'erreur affiche les différences entre les objets Liste et Dictionnaire.
FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "asserttest.py", line 5, in test1
self.assertListEqual([2,3,4], [1,2,3,4,5])
AssertionError: Lists differ: [2, 3, 4] != [1, 2, 3, 4, 5]
First differing element 0:
2
1
Second list contains 2 additional elements.
First extra element 3:
4
- [2, 3, 4]
+ [1, 2, 3, 4, 5]
? +++ +++
FAIL: test3 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "asserttest.py", line 9, in test3
self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})
AssertionError: {1: 11, 2: 22} != {1: 11, 2: 22, 3: 33}
- {1: 11, 2: 22}
+ {1: 11, 2: 22, 3: 33}
? +++++++
----------------------------------------------------------------------
Ran 3 tests in 0.001s
FAILED (failures = 2)