Unbundling Pirate Tests
Pirate's
unittests were structured in the conventional way: one class
with a large number of test_*
methods, each containing
a single test case. One of my first changes to Pirate was to
unbundle these into separate
files. I did this using a trick I picked up from
Mark Pilgrim, namely to create
a loop which dynamically created test_*
methods, one per
file, thus:
# For every test/*/filename.py file, create a test_filename method for test in sys.argv[1:] or glob("test/*/*.py"): testName = "test_" + os.path.splitext(os.path.split(test)[1])[0] testFunc = lambda self, test=test: self.runTest(test) testFunc.__doc__ = testName instanceMethod = new.instancemethod(testFunc, None, PirateTest) setattr(PirateTest, testName, instanceMethod)