web-dev-qa-db-fra.com

Essayer d'implémenter python TestSuite

J'ai deux cas de test (deux fichiers différents) que je veux exécuter ensemble dans une suite de tests. Je peux faire exécuter les tests simplement en exécutant python "normalement" mais quand je choisis d'exécuter un test d'unité python, il dit 0 test exécuté. En ce moment, j'essaie simplement d'obtenir à au moins un test pour fonctionner 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 configuré

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 obtenir ce travail correctement?

29
avoliva

vous souhaitez utiliser une combinaison de tests. 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)
47
Dileep Nandanam

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

8
Julian

Si vous essayez de collecter manuellement TestCases, cela est utile: unittest.loader.findTestCases():

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

Je suppose que vous faites référence à l'exécution d'un test unitaire python contre le module qui consolide les deux tests. Cela fonctionnera si vous créez un cas de test pour ce module, c'est-à-dire. sous-classement 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()
1
Cheng