2010-04-12 7 views
1

J'ai une suite de tests pour effectuer des tests de fumée. J'ai tout mon script stocké dans diverses classes, mais quand j'essaie de lancer la suite de tests, je n'arrive pas à la faire fonctionner si elle est dans une classe. Le code est ci-dessous: (une classe pour appeler les essais)Exécuter unittest dans une classe

from alltests import SmokeTests 

class CallTests(SmokeTests): 

    def integration(self): 

     self.suite() 

if __name__ == '__main__': 
    run = CallTests() 
    run.integration() 

Et la suite de tests:

class SmokeTests(): 

    def suite(self): #Function stores all the modules to be tested 
     modules_to_test = ('external_sanity', 'internal_sanity') # This is the name of the file 
     alltests = unittest.TestSuite() 
     for module in map(__import__, modules_to_test): 
      alltests.addTest(unittest.findTestCases(module)) 
     return alltests 
if __name__ == '__main__': 
    unittest.main(defaultTest='suite') 

Je peux donc voir comment appeler une fonction normale définie mais je trouve difficile appeler dans la suite. Dans l'un des essais, la suite est mis en place comme ceci:

class TestInternalSanity(unittest.TestCase): 

    def setUp(self): 

     setUp script .... 

    def tearDown(self): 

     script .... 

class BasicInternalSanity(TestInternalSanity): 

    def runTest(self): 

     test script .... 

class InternalSanityTestSuite(unittest.TestSuite): 

    # Tests to be tested by test suite 
    def makeInternalSanityTestSuite(): 
     suite = unittest.TestSuite() 
     suite.addTest(TestInternalSanity("BasicInternalSanity")) 
     suite.addTest(TestInternalSanity("VerifyInternalSanityTestFail")) 
     return suite 

    def suite(): 
     return unittest.makeSuite(TestInternalSanity) 

Si je def suite() à l'intérieur du class SmokeTests le script exécute mais les tests ne cours pas, mais si je retire la classe les tests exécutés. Je cours ceci comme un script et appelle des variables dans les tests. Je ne veux pas avoir à exécuter les tests par os.system ('python tests.py'). J'espérais appeler les tests à travers la classe que j'ai comme toute autre fonction. Ce besoin doit être appelé d'une classe car le script que je l'appelle est orienté objet. Si quelqu'un peut obtenir le code à exécuter en utilisant des tests d'appel, je l'apprécierais beaucoup.

de ce travail:

def suite(): #Function stores all the modules to be tested 
    modules_to_test = ('external_sanity', 'internal_sanity') 
    alltests = unittest.TestSuite() 
    for module in map(__import__, modules_to_test): 
     alltests.addTest(unittest.findTestCases(module)) 
    return alltests 
if __name__ == '__main__': 
    unittest.main(defaultTest='suite') 

Cela ne fonctionne pas:

class SmokeTests(): 

    def suite(self): #Function stores all the modules to be tested 
     modules_to_test = ('external_sanity', 'internal_sanity') 
     alltests = unittest.TestSuite() 
     for module in map(__import__, modules_to_test): 
      alltests.addTest(unittest.findTestCases(module)) 
     return alltests 
if __name__ == '__main__': 
    unittest.main(defaultTest='suite') 

Je ne peux pas sembler obtenir ceci pour fonctionner dans la classe, peut-on voir la solution.

Merci

+0

Veuillez fournir un code source fonctionnel. Ceci n'est évidemment pas copié-collé correctement (remarquez la mauvaise indentation). Si vous supprimez SmokeTests.suite(), il ne fonctionnera pas du tout. – Messa

+0

Pourquoi posez-vous cette question à nouveau? http://stackoverflow.com/questions/2606515/problems-running-unittest-test-suite-oo –

+0

@ S.Lott - Je l'ai réécrit pour que la question soit claire – chrissygormley

Répondre

2

obtenu ce travail, désolé pour perdre le temps de tout le monde, la réponse était de changer le nom de test par défaut.

class SmokeTests(): 

    def suite(self): #Function stores all the modules to be tested 
     modules_to_test = ('external_sanity', 'internal_sanity') 
     alltests = unittest.TestSuite() 
     for module in map(__import__, modules_to_test): 
      alltests.addTest(unittest.findTestCases(module)) 
     return alltests 
if __name__ == '__main__': 
    Smoke = SmokeTests() 
    unittest.main(defaultTest='Smoke.suite') 

Merci pour toute aide.

1

On dirait que vous faites unittests beaucoup plus compliqué que ce qu'ils sont en réalité. Peut-être que votre mise en œuvre devrait ressembler à ceci:

import unittest 

class MyClass(object): 

    def add(self, val, other): 
     return val + other 

    def subtract(self, val, other): 
     return val - other 


class TestClass(unittest.TestCase): 

    def test_add(self): 
     myclass = MyClass() 
     self.assert_(myclass.add(1, 2) == 3) 

    def test_subtract(self): 
     myclass = MyClass() 
     self.assert_(myclass.subtract(2, 1) == 1) 


if __name__ == '__main__': 
    unittest.main() 
Questions connexes