Bonjour
j'ai une classe qui contient un ensemble des fonctions et j'aimerais bien tester chacune de ces fonctions ,
vous avez un exemple sur le test unitaire pyUnit si on veut l'appliquer à des méthodes précises ?
merci
Bonjour
j'ai une classe qui contient un ensemble des fonctions et j'aimerais bien tester chacune de ces fonctions ,
vous avez un exemple sur le test unitaire pyUnit si on veut l'appliquer à des méthodes précises ?
merci
Bonjour nancy maman,
pourquoi ne pas utiliser doctests, quant à l'utilisation pyUnit, il suffit d'appeler la méthode avec des paramètres variables dans ton jeu de tests.
Olivier.
Salut,
unittest ou PyUnit est livré avec Python en standard au moins depuis 2.6, 2.7 et 3.x. En supposant que vous avez jeté un œil à la documentation qui illustre les utilisations de base avec des exemples, quels sont vos soucis?
- W
Bonjour
Pour info, voici mon modèle pour les unittest :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 # utt_template.py # -*- coding: utf-8 -*- # ---------------------------------------------------------------------------- # Template file for unittes # ---------------------------------------------------------------------------- __version__ = "$Revision: 10527 $" __verbose__ = 0 #----------------------------------------------------------------------------- # Import #----------------------------------------------------------------------------- # Python standard library ( in alphabetical order) import unittest # Project ( in alphabetical order) #from core.error import err_logger # tested file : import class to test from template import vdr_template #----------------------------------------------------------------------------- # Class #----------------------------------------------------------------------------- class UTT_TestTemplate(unittest.TestCase): # as it's a template, set an empty method def setUp(self): pass # test case def testTemplate(self): # call to method # VDR_Template.myMethod() self.assertEqual(1, 1) # as it's a template, set an empty method def tearDown(self): pass def UTT_TestSuiteTemplate(testSuite): for t in ('testTemplare', # add other test name herer # 'testInit', # 'testRead', ): testSuite.addTest( UTT_TestTemplate( t ) ) #----------------------------------------------------------------------------- # Invoke main #----------------------------------------------------------------------------- # Call main() when this file is run as a script (not imported as a module) if __name__ == '__main__': print('utt_template.py start ------------------------------') testSuite = unittest.TestSuite() UTT_TestSuiteTemplate(testSuite) unittest.TextTestRunner(verbosity=2).run(testSuite) print('utt_template.py stop------------------------------') # end of file
Cordialement
Emmanuel
Merci emmanuel_dumas pour ton template, il me sera utile
je pense juste remplacer :
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 def UTT_TestSuiteTemplate(testSuite): for t in ('testTemplare', # add other test name herer # 'testInit', # 'testRead', ): testSuite.addTest( UTT_TestTemplate( t ) )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def UTT_TestSuiteTemplate(testSuite): testSuite.addTest( map(UTT_TestTemplate, [ 'testTemplare', ...]))
Salut,
Par pure curiosité, quelqu'un utilise l'instruction assert (qui correspond à la macro assert du C) qui ne nécessite pas d'import particulier? Je fais tous mes test unitaires avec cette fonction.
A+
Pfeuh
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def IntegerToAscii(value): return "%i"%value assert IntegerToAscii(0) == "0" assert IntegerToAscii(0x80000000) == "2147483648" assert IntegerToAscii(0xffffffff) == "4294967295" assert IntegerToAscii(-0x80000000) == "-2147483648"
merci à vous tous
pour les docs , je m'en sors pas trop en anglais
mon souci ce que j'arrive pas à lier entre les méthodes qu'on veut tester et la classe de test je vous passe mon code que j'ai fais en se basant sur vos exemples :
j'aimerais tester les fontions : donnerNom et nomFonction
code : ClassePersonne.py
code : AppelClassePersonne.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #!/usr/bin/python # -*- coding: iso-8859-1 -*- class ClassePersonne(): def __init__(self,nom): self.nom=nom def nomFonction(self): print "salut",self.nom def donnerNom(self): print "-----------------------" print "votre nom : " nom = raw_input() print "Bonjour ",nom
code : Test_AppelTestClasse.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 from ClassePersonne import * class AppelClassePersonne: def __init__(self): self.c=AppelClassePersonne() def aff(self): print "hi" if __name__ == "__main__": personne=ClassePersonne('Nancy') personne.nomFonction() personne.donnerNom()
j'ai qq messages d'erreurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 # utt_template.py # -*- coding: utf-8 -*- import unittest from ClassePersonne import ClassePersonne class UTT_TestClasse(unittest.TestCase): def setUp(self): self.c=ClassePersonne() personne=ClassePersonne('Nancy') def testClasse(self): ClassePersonne.donnerNom() ClassePersonne.nomFonction("maman") self.assertEqual(1, 1) def tearDown(self): pass def UTT_TestSuiteClasse(testSuite): testSuite.addTest( map(UTT_TestClasse, ['testClasse'])) if __name__ == '__main__': testSuite = unittest.TestSuite() UTT_TestSuiteClasse(testSuite) unittest.TextTestRunner(verbosity=2).run(testSuite)
Bonjour
Quelques idées pour procédé différement, attention, toutes ces idées ne sont pas directement opérationnels.
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 # utt_template.py # -*- coding: utf-8 -*- import unittest from ClassePersonne import ClassePersonne # test unitaire sur la création class UTT_TestClasse(unittest.TestCase): def setUp(self): pass def testClasse1(self): " test l'appel à l'init" self.c=ClassePersonne() personne=ClassePersonne('Nancy') def testClasse2(self) "test le nom et la fonction de la personne" personne=ClassePersonne('Nancy') self.asserEqual(personne.donnerNom(), 'Nancy') self.asserEqual(personne.nomFonction("maman"), "maman") def tearDown(self): pass # test unitaire sur l'utilisation class UTT_TestClasse2(unittest.TestCase): def setUp(self): self.personne = ClassePersonne() def testClasse1(self): elf.asserEqual(self.personne.donnerNom(), 'Nancy') def testClasse2(self) "test la fonction de la personne" self.asserEqual(self.personne.nomFonction("maman"), "maman") def tearDown(self): pass def UTT_TestSuiteClasse(testSuite): testSuite.addTest( map(UTT_TestClasse, ['testClasse1', 'testClasse2'])) testSuite.addTest( map(UTT_TestClasse2, ['testClasse1', 'testClasse2'])) if __name__ == '__main__': testSuite = unittest.TestSuite() UTT_TestSuiteClasse(testSuite) unittest.TextTestRunner(verbosity=2).run(testSuite)
Emmanuel
Bonjour,
merci
j'ai testé ton exemple mais ca marche pas
il génère des erreurs au niveau des lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 testSuite.addTest( map(UTT_TestClasse, ['testClasse1','testClasse2'])) testSuite.addTest( map(UTT_TestClasse2, ['testClasse1','testClasse2']))![]()
j'ai corrigé les erreurs , voici le code
et quand je l'execute j'ai ce resultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 # utt_template.py # -*- coding: utf-8 -*- import unittest from ClassePersonne import ClassePersonne # test unitaire sur la création class UTT_TestClasse(unittest.TestCase): def setUp(self): pass def testClasse1(self): " test l'appel à l'init" self.c=ClassePersonne() personne=ClassePersonne('Nancy') def testClasse2(self): "test le nom et la fonction de la personne" personne=ClassePersonne('Nancy') self.asserEqual(personne.donnerNom(), 'Nancy') self.asserEqual(personne.nomFonction("maman"), "maman") def tearDown(self): pass # test unitaire sur l'utilisation class UTT_TestClasse2(unittest.TestCase): def setUp(self): self.personne = ClassePersonne() def testClasse1(self): self.asserEqual(self.personne.donnerNom(), 'Nancy') def testClasse2(self): "test la fonction de la personne" self.asserEqual(self.personne.nomFonction("maman"), "maman") def tearDown(self): pass def suite(testSuite): loader = unittest.TestLoader() s = unittest.TestSuite() s.addTest(loader.loadTestsFromTestCase(UTT_TestClasse)) #s.addTest(loader.loadTestsFromTestCase(testClasse2)) return s #def UTT_TestSuiteClasse(testSuite): #testSuite.addTest( map(UTT_TestClasse, ['testClasse1','testClasse2'])) #testSuite.addTest( map(UTT_TestClasse2, ['testClasse1','testClasse2'])) if __name__ == '__main__': testSuite = unittest.TestSuite() suite(testSuite) #UTT_TestSuiteClasse(testSuite) unittest.TextTestRunner(verbosity=2).run(testSuite)
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
j'aimerais savoir la signification de ces résultats , est ce que ca veut dire que aucun test n'a été effectué donc le test n'est pas validé ???
merci
Ran 0 : aucun test d'effectué.
Bon ce code là , je l'ai fait marché. Je suis pas copain avec les map, je suis revenu à mes boucles for (NB je suis en Python 3):
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 # utt_template.py # -*- coding: utf-8 -*- import unittest #from ClassePersonne import ClassePersonne class ClassePersonne(): def __init__(self,nom): self.nom=nom def nomFonction(self): print("salut",self.nom) def donnerNom(self, Nom): print("-----------------------") print("votre nom : ") self.nom = Nom print("Bonjour ",self.nom) # test unitaire sur la cr←ation class UTT_TestClasse(unittest.TestCase): def setUp(self): pass def testClasse1(self): " test l'appel ¢ l'init" self.c=ClassePersonne('toto') personne=ClassePersonne('Nancy') def testClasse2(self): "test le nom et la fonction de la personne" personne=ClassePersonne('Nancy') self.assertEqual(personne.donnerNom('Nancy'), 'Nancy') self.assertEqual(personne.nomFonction("maman"), "maman") def tearDown(self): pass # test unitaire sur l'utilisation class UTT_TestClasse2(unittest.TestCase): def setUp(self): self.personne = ClassePersonne('toto') def testClasse1(self): self.assertEqual(self.personne.donnerNom('titi'), 'Nancy') def testClasse2(self): "test la fonction de la personne" self.assertEqual(self.personne.nomFonction(), "maman") def tearDown(self): pass def UTT_TestSuiteClasse(testSuite): for t in ('testClasse1','testClasse2'): testSuite.addTest( UTT_TestClasse(t) ) for t in ('testClasse1','testClasse2'): testSuite.addTest( UTT_TestClasse2(t) ) if __name__ == '__main__': testSuite = unittest.TestSuite() UTT_TestSuiteClasse(testSuite) unittest.TextTestRunner(verbosity=2).run(testSuite)
Emmanuel
j'ai testé ton code , et j'ai ca comme résultat :
test l'appel ¢ l'init ... ok
test le nom et la fonction de la personne ... -----------------------
votre nom :
('Bonjour ', 'Nancy')
FAIL
testClasse1 (__main__.UTT_TestClasse2) ... FAIL
test la fonction de la personne ... FAIL
======================================================================
FAIL: test le nom et la fonction de la personne
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Documents and Settings\py3.py", line 36, in testClasse2
self.assertEqual(personne.donnerNom('Nancy'), 'Nancy')
AssertionError: None != 'Nancy'
-----------------------
votre nom :
('Bonjour ', 'titi')
('salut', 'toto')
======================================================================
FAIL: testClasse1 (__main__.UTT_TestClasse2)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Documents and Settings\py3.py", line 50, in testClasse1
self.assertEqual(self.personne.donnerNom('titi'), 'Nancy')
AssertionError: None != 'Nancy'
======================================================================
FAIL: test la fonction de la personne
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Documents and Settings\py3.py", line 54, in testClasse2
self.assertEqual(self.personne.nomFonction(), "maman")
AssertionError: None != 'maman'
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (failures=3)
Là, il dit que la classe Personne ne fait pas ce qu'on attend d'elle.
Il n'y a plus d'erreur de syntaxe python, il ya juste des "testcase" échoué. Quand dans le code il est écrit :
il faut que la variable valeur1 soit égale à 'valeur', sinon vous avez un des messages cité plus haut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part self.assertEqual( valeur1, 'valeur')
Donc arrivé là, je pense que plus personne ne peut vous aider, si vous ne déterminer pas précisément :
- ce que fait la classe Personne
- ce que vous voulez tester avec le unittest
NB : commencer par tester que la classe "affiche" bien un résultat est loin d'être la chose la plus évidente à faire. On commence en général par vérifier que les champs ont bien une certaine valeur, exemple que self.nom est bien rempli avec 'Nancy'.
Cordialement
Emmanuel
Partager