2012-08-17 19 views
21

zu implementieren Ich habe zwei Testfälle (zwei verschiedene Dateien), die ich zusammen in einer Test Suite ausführen möchte. Ich kann die Tests ausführen, indem ich Python "normal" ausführe, aber wenn ich einen Python-Unit-Test ausfühle, heißt es, dass 0 Tests ausgeführt werden. Im Moment versuche ich nur, mindestens einen Test zu bekommen, um korrekt zu laufen.Ich versuche, Python TestSuite

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" 

Hier ist ein Beispiel für meine Testfall einrichten

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() 

Was muss ich tun, um diese Arbeit richtig zu bekommen?

Antwort

38

möchten Sie einen Testanzug verwenden. Sie müssen also nicht unittest.main() aufrufen. Verwendung von testsuit sollte so sein ..

#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) 
+0

nur den Code ausführen, indem –

+0

Danke, danke war perfekt für das, was ich brauchte. Vielen Dank! – avoliva

+2

Vielen Dank für diese Antwort. Warum in aller Welt muss ich "unittest.makeSuite" aufrufen, um einen Test zu einer * bestehenden * Suite hinzuzufügen? – timgeb

4

Der gesamte Code zum Erstellen eines Loaders und einer Suite ist nicht erforderlich. Sie sollten Ihre Tests so schreiben, dass sie über Testentdeckung mit Ihrem bevorzugten Test-Runner ausgeführt werden können. Das bedeutet nur, dass Sie Ihre Methoden auf eine standardmäßige Weise benennen, sie in einen importierbaren Bereich stellen (oder einen Ordner übergeben, der sie enthält) und von unittest.TestCase erben. Nachdem Sie das getan haben, können Sie python -m unittest discover auf dem einfachsten oder einem netteren Drittanbieter-Läufer verwenden, um Ihre Tests zu entdecken und dann auszuführen.

0

Ich gehe davon aus Sie Python-Unit-Test zum Laufen gegen das Modul beziehen, die die beiden Tests konsolidieren. Es funktioniert, wenn Sie Testfall für dieses Modul erstellen, dh. Unterklasse unittest.TestCase und mit einem einfachen Test, der mit dem Wort "Test" beginnt.

z.B.

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

Wenn Sie manuell versuchen TestCase s zu sammeln, das ist nützlich: unittest.loader.findTestCases():

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