[Tutor] Test code organization
Willi Richert
richert at c-lab.de
Thu Mar 9 13:47:13 CET 2006
Hi,
for some time I try to find the best test code organization. I've come
up with the following solution, which I guess is not optimal. Please
comment.
In the code directory there is a special tests directory, which contains
all the unit test files. There is the file alltests.py which collects
all python test files and executes them:
=====================================
import sys, unittest
sys.path.append(".")
sys.path.append("..")
TEST_DIR = "tests"
import glob
testCases = [t.split(".")[0] for t in glob.glob1(TEST_DIR, "*Tests.py")]
print "Found test case modules "+", ".join(testCases)
print
for t in testCases:
exec("from %s import %s"%(TEST_DIR, t))
def suite():
exec("suites = tuple([x.suite() for x in [%s]])"%str(",
".join(testCases)))
suite = unittest.TestSuite(suites)
return suite
if __name__ == '__main__':
suite = suite()
result = unittest.TextTestRunner(verbosity=2).run(suite)
if result.wasSuccessful():
sys.exit(0)
else:
sys.exit(1)
======================================
For every class to test I create a ClassTests.py file which contains the
following code:
Header:
======================================
import sys
sys.path.append("..")
import unittest
from Class... import *
======================================
The footer parses the available test classes:
======================================
def _testclasses():
mod = sys.modules[__name__]
return [getattr(mod, name) for name in dir(mod) if
name.endswith('TestCase')]
def suite():
return unittest.TestSuite([unittest.makeSuite(tc) for tc in
_testclasses()])
if __name__ == '__main__':
unittest.main()
======================================
What smalls badly is the sys.path.append() stuff every test file must
have. Improvements?
Thanks for any comment,
wr
More information about the Tutor
mailing list