paul kölle wrote:
> hi all,
> 
> I noticed that setUp() and tearDown() is run before and after *earch*
> test* method in my TestCase subclasses. I'd like to run them *once* for
> each TestCase subclass. How do I do that.

One way to do this is to make a TestSuite subclass that includes your startup 
and shutdown code.

For example I have some tests that rely on a webserver being started. I have a 
TestSuite that starts the server, runs the tests and stops the server. This way 
the server is only started once per test module. Here is the TestSuite class:

class CbServerTestSuite(unittest.TestSuite):
    ''' A test suite that starts an instance of CbServer for the suite '''
    def __init__(self, testCaseClass):
        unittest.TestSuite.__init__(self)
        
self.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(testCaseClass))

    def __call__(self, result):
        CbServer.start()
        unittest.TestSuite.__call__(self, result)
        CbServer.stop()


I use it like this:

class MyTest(unittest.TestCase):
    def testWhatever(self):
        pass

def suite():
    return CbServerTestSuite(MyTest)

if __name__=='__main__':
    unittest.TextTestRunner().run(suite())


This runs under Jython (Python 2.1); in more recent Python I think you can 
override TestSuite.run() instead of __call__().

Kent
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to