Basic Unit Test setup
This is a small bit of code I might want to use for unit testing and I thought it might be useful to others too. It just makes it a bit easier (IMHO) to use the python unittest module:testbase.py:
--------------------------------------------------------------
import unittest def testmethod(testMethod): testMethod._isTest = True return testMethod class BasicTestSet(unittest.TestCase): @classmethod def suite(cls): def isTestMethod(attrname): attr = getattr(cls, attrname) return hasattr(attr, "_isTest") testNames = filter(isTestMethod, dir(cls)) return unittest.TestSuite(map(cls,testNames)) def make_suite(*args): fullSuite = unittest.TestSuite() for testSet in args: fullSuite.addTest(testSet.suite()) return fullSuite--------------------------------------------------------------
I then use it like this for example:
test_sprites.py:
--------------------------------------------------------------
from testbase import * import unittest from sprites import * def suite(): return make_suite(TowerTests) class TowerTests(BasicTestSet): def setUp(self): self.tower = Tower() @testmethod def testCreate(self): self.failIf(self.tower is None) @testmethod def testGrow(self): self.tower.grow() self.failUnlessEqual(self.tower.level, 1)--------------------------------------------------------------
and I have a runtests.py that looks like this (though you could easily use a different test runner):
--------------------------------------------------------------
import unittest import test_world import test_sprites all_tests = unittest.TestSuite() all_tests.addTests((test_world.suite(), test_sprites.suite())) unittest.TextTestRunner().run(all_tests)--------------------------------------------------------------
(log in to comment)
richard on 2008/08/03 01:43:
You'd probably be better-off just using a more intelligent test harness. I believe the "trial" test runner from the Twisted project is very good at finding tests without all that suite malarky. There's other test runners that are stand-alone but I've not tried them.