IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

le role de la methode Main() en python


Sujet :

Python

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut le role de la methode Main() en python
    Bonjour,
    voila j'ai une petit soucis avec mes script de teste unitaire
    voila le script de teste ou se trouve la classe test_Toto:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class test_Toto(unittest.TestCase): 
     
               def SetUp():
                    self.a= aTester()
               def test_ping():
                   self.a.ping()
                   .......
    et voila le script ou se trouve la classe à tester
    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
     
     
    class aTester(serialTester):
           def ping():
            ......
     
    def main()
     ....
     
     
    if __name__ == "__main__":
     
        sys.exit(main())
     
    sys.exit(main())
    le problème est que quand je lance le programme test_Toto, il rentre directement dans le main() et exécute le code de la classe aTester()
    si je supprime la méthode main(), il passe bien par toutes les méthode de test_Toto mais ne fait pas appel aux méthodes de la classe aTester().
    pourriez vous m'aider svp

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    Pour faire des tests unitaires pourquoi n'utilises-tu pas le module unittest?

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    il utilise bien unittest.

    je ne sais pas trop ce que font tes classes et tes fonctions donc, je ne peux pas trop t'aider.

    voici un exemple:
    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
     
    import unittest
     
    class ClasseATester(object):
        def hello(self):
            return "hello"
     
    class TestClasseATester(unittest.TestCase):
        def setUp(self):
            self.obj = ClasseATester()
        def tearDown(self):
            del self.obj
        def test_hello(self):
            self.assertEquals(self.obj.hello(),'hello')
     
    def main():
        suite = unittest.TestLoader().loadTestsFromTestCase(TestClasseATester)
        unittest.TextTestRunner(verbosity=2).run(suite)
     
    if __name__ == '__main__':
        main()

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    le probleme c'est que quand je lance le script, il execute plusieurs fois les methodes.
    exemple: si comme si l'exécution de ton code me renvoie:
    hello
    hello
    hello
    hello

    et plus j'avance dans mes fonction plus le nombre augmente, je me demande si ce n'est pas a cause "teamDown()"
    voila ma classe teste:
    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
     
    class fftestTestBase(unittest.TestCase):
    	""" Tester la reussite"""
    	# tester que nos fonctions réussissent lorsqu’on leur passe des entrées correctes
     
     
    	#pdb.set_trace()         #breakpoint              
    	def setUp(self):     #appeler avant chaque test(appel a une methode)
    		timestamp = time.strftime("%Y%m%d_%H%M%S", time.gmtime())
    		logfile = "fftestTestBase_"+timestamp+".log"
    		self.a = ClasseATester("COM3",logfile)
     
     
     
     
    		  # Initialize logs
    		  #verification os
    		if platform.platform().startswith('Windows'):
    			chemin = os.getcwd()
    		 	logging_file = os.path.join(chemin, logfile)
     
     
    	        loglev = logging.DEBUG # debug and logging.DEBUG or logging.INFO
    	        logfmt = "%(asctime)s.%(msecs)03d: %(message)s"
    	        logging.basicConfig(level=loglev,
    	                           format=logfmt,
    	                           datefmt="%H:%M:%S",
    	                           filename=logfile, filemode='wb')
    	        # Add console output to stdout for the time being
    	        conlog = logging.StreamHandler(sys.stdout)
    	        conlog.setFormatter(logging.Formatter("%(message)s"))
    	        log = logging.getLogger("fftestTestBase")
    	        log.addHandler(conlog)
    	        log.info("%s" % time.asctime())
    	        log.info("Initializing non_regression test")
    	        log.info("Logging at: %s "  % logging_file)
    	        llname = logging.getLevelName(loglev)
    	        log.debug("Log file='%s'" % logfile)
     
    	        self.log = log
    	        self.conlog = conlog
    	        print ( "#"*70)
    	        # A Finir(logging)
     
    	def tearDown(self):
    		del self.a
     
     
     
     
    	def test_ping(self):
    		print("doc: %s" % self.a.ping.func_doc)			
    		result = self.a.ping()         #expected result -->to be change
    		self.assertEqual(self.a.ping(),result )
    		print ( "#"*70)
     
     
     
    	def test_find(self):
    		print("doc: %s" % self.a.find.func_doc)
    		#pdb.set_trace()         #breakpoint
     		result = self.a.find(0x796F)  #expected result -->to be change
    		self.assertEqual(self.a.find(0x796F),result )
    		print ( "#"*70)

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    oups j'ai oublier une partie
    voila le code complet:
    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
    73
    74
    75
     
    class fftestTestBase(unittest.TestCase):
    	""" Tester la reussite"""
    	# tester que nos fonctions réussissent lorsqu’on leur passe des entrées correctes
     
     
    	#pdb.set_trace()         #breakpoint              
    	def setUp(self):     #appeler avant chaque test(appel a une methode)
    		timestamp = time.strftime("%Y%m%d_%H%M%S", time.gmtime())
    		logfile = "fftestTestBase_"+timestamp+".log"
    		self.a = ClasseATester("COM3",logfile)
     
     
     
     
    		  # Initialize logs
    		  #verification os
    		if platform.platform().startswith('Windows'):
    			chemin = os.getcwd()
    		 	logging_file = os.path.join(chemin, logfile)
     
     
    	        loglev = logging.DEBUG # debug and logging.DEBUG or logging.INFO
    	        logfmt = "%(asctime)s.%(msecs)03d: %(message)s"
    	        logging.basicConfig(level=loglev,
    	                           format=logfmt,
    	                           datefmt="%H:%M:%S",
    	                           filename=logfile, filemode='wb')
    	        # Add console output to stdout for the time being
    	        conlog = logging.StreamHandler(sys.stdout)
    	        conlog.setFormatter(logging.Formatter("%(message)s"))
    	        log = logging.getLogger("fftestTestBase")
    	        log.addHandler(conlog)
    	        log.info("%s" % time.asctime())
    	        log.info("Initializing non_regression test")
    	        log.info("Logging at: %s "  % logging_file)
    	        llname = logging.getLevelName(loglev)
    	        log.debug("Log file='%s'" % logfile)
     
    	        self.log = log
    	        self.conlog = conlog
    	        print ( "#"*70)
    	        # A Finir(logging)
     
    	def tearDown(self):
    		del self.a
     
     
     
     
    	def test_ping(self):
    		print("doc: %s" % self.a.ping.func_doc)			
    		result = self.a.ping()         #expected result -->to be change
    		self.assertEqual(self.a.ping(),result )
    		print ( "#"*70)
     
     
     
    	def test_find(self):
    		print("doc: %s" % self.a.find.func_doc)
    		#pdb.set_trace()         #breakpoint
     		result = self.a.find(0x796F)  #expected result -->to be change
    		self.assertEqual(self.a.find(0x796F),result )
    		print ( "#"*70)
     
     
    suite = unittest.TestSuite()  # construit une batterie de teste
    suite.addTest(unittest.makeSuite(fftestTestBase))    #ajout a la batterie
     
     
    unittest.TextTestRunner(verbosity=2).run(suite)
     
    #pdb.set_trace()		
    if __name__ == "__main__":
    	unittest.main()

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,
    Le problème n'a rien à voir avec "main" ou les unittests mais sur ce que vous avez ajouté dans les tests et les fixtures qui n'ont peut être rien à y faire.

    Suggestion: Mettez en commentaire tout ce qui dans setUp est autre que:
    self.a = ClasseATester("COM3",logfile)

    Que çà fonctionne ou pas, est-il raisonnable d''initialiser logging autant de fois qu'il y a de méthodes dans la classe testCase?
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    ok, mais le probleme c'est que maintenant je n'arrive plus a lancer les Test_Methode
    c'est les methode de la ClasseATester qui sont lancé, voila le script
    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
     
    class ClasseATester(SerialTester):
     
        def __init__(self, port, logfile=LOGFILE):
            SerialTester.__init__(self, port)
     
     
     
        def __fini__(self):
            self.log.info("Shutting down")
            logging.shutdown()
     
        def ping(self): 
            self.logc("ping()")
            self.send_raw(SYS_PING)
     
        def find(self, node):        
            self.send(node, FIND_REQUEST)
     
    def main(argv=None):
     
    	global _t
        _t = FirefliesTester(p, logf)
     
        _t.log.info("Starting Tester on %s" % port)
        _t.start()
        _t.verbose(verb)
     
    if __name__ == "__main__":
        sys.exit(main())
     
    sys.exit(main())

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    désolé, sa remarche mais j'ai un message d'erreur :
    line 39, in setUp
    self.a = ClasseATester("COM33, logfile)
    NameError: global name 'ClasseATester' is not defined

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    c'ete un problème d'import de la classe "ClasseATester"
    mais le problème du lancement des méthodes plusieurs fois persiste

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,
    Comme c'est la seule ligne que vous n'avez pas modifié (mis en commentaire) dans setUp... Ca ne marchait pas avant ou vous avez fait autre chose.

    De toutes façons, il sera difficile de vous dire quoi que ce soit de sérieux sans que vous montriez le code dont vous parlez pour nous permettre de reproduire le soucis constaté.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 167
    Par défaut
    wiztricks je vous ai envoyer un mail privé

Discussions similaires

  1. Classe ok dans une methode main, ko dans la servlet
    Par chennuo dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/01/2010, 10h51
  2. sur la methode main et void
    Par ertyup dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 03/08/2009, 01h11
  3. Probleme methode main
    Par Otero dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 21/01/2009, 13h13
  4. un Site Totalement en Python , quelle Methode ?
    Par kedare dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 11/12/2005, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo