37 votes

Essayer d'implémenter TestSuite en python

J'ai deux cas de test (deux fichiers différents) que je veux exécuter ensemble dans une suite de test. J'arrive à exécuter les tests en exécutant python "normalement", mais lorsque je sélectionne l'exécution d'un test unitaire python, le système indique qu'aucun test n'a été exécuté. Pour l'instant, j'essaie simplement de faire en sorte qu'au moins un test soit exécuté correctement.

import usertest
import configtest # first test
import unittest   # second test

testSuite = unittest.TestSuite()
testResult = unittest.TestResult()
confTest = configtest.ConfigTestCase()
testSuite.addTest(configtest.suite())
test = testSuite.run(testResult)
print testResult.testsRun # prints 1 if run "normally"

Voici un exemple de mon scénario de test mis en place

class ConfigTestCase(unittest.TestCase):
    def setUp(self):

        ##set up code

    def runTest(self):

        #runs test

def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

if __name__ == "__main__":
    #So you can run tests from this module individually.
    unittest.main()

Que dois-je faire pour que cela fonctionne correctement ?

55voto

dileep nandanam Points 2386

Vous voulez utiliser une combinaison de test. Vous n'avez donc pas besoin d'appeler unittest.main(). L'utilisation de la combinaison de tests devrait être comme ceci :

#import usertest
#import configtest # first test
import unittest   # second test

class ConfigTestCase(unittest.TestCase):
    def setUp(self):
        print 'stp'
        ##set up code

    def runTest(self):
        #runs test
        print 'stp'

def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

mySuit=suite()

runner=unittest.TextTestRunner()
runner.run(mySuit)

8voto

Julian Points 2499

Tout le code pour créer un chargeur et une suite est inutile. Vous devez écrire vos tests de manière à ce qu'ils puissent être exécutés via la découverte des tests à l'aide de votre gestionnaire de tests préféré. Cela signifie simplement nommer vos méthodes de manière standard, les placer dans un endroit importable (ou passer un dossier les contenant au runner), et hériter de unittest.TestCase . Après avoir fait cela, vous pouvez utiliser python -m unittest discover au plus simple, ou un exécuteur tiers plus agréable pour découvrir et ensuite exécuter vos tests.

2voto

Ben Points 635

Si vous essayez de collecter manuellement TestCase c'est utile : unittest.loader.findTestCases() :

# Given a module, M, with tests:
mySuite = unittest.loader.findTestCases(M)
runner = unittest.TextTestRunner()
runner.run(mySuit)

1voto

Cheng Points 11

Je suppose que vous faites référence à l'exécution de python-unit test contre le module qui consolide les deux tests. Cela fonctionnera si vous créez un scénario de test pour ce module, par exemple en le sous-classant. unittest.TestCase et avoir un test simple qui commence par le mot "test".

par exemple

class testall(unittest.TestCase):

    def test_all(self):           
        testSuite = unittest.TestSuite()
        testResult = unittest.TestResult()
        confTest = configtest.ConfigTestCase()
        testSuite.addTest(configtest.suite())
        test = testSuite.run(testResult)
        print testResult.testsRun # prints 1 if run "normally"

if __name__ == "__main__": 
      unittest.main()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X