I accidentally "discovered" the TestCollector idea independently in Python. My tests all end in "Test.py", and I set them up so I can run each of them independently from the command line, or all at once with this script. I have this in "runAllTests.py" and invoke it so that the current directory is the top of the program. (Unlike most Python programmers I actually have a lot of separate directories and modules.) It recursively searches the current directory for things to test and runs them all at once.
No guarantees, etc.
#!/bin/python import sys import os import re import unittest import imp filesList = [] def collector(arg, dirname, names): filesList.extend([dirname + os.sep + n for n in names]) def returnTests(): p = os.path.abspath(os.path.dirname(sys.argv[0])) os.path.walk(p, collector, None) fList = [x for x in filesList if x[-7:] == "Test.py" and '#' not in x] # '#' is for temp files in emacs, extend as needed fileList = [file(x, "r") for x in fList] modules = [] for i in range(len(fList)): modules.append(imp.load_source(os.path.split(fList[i])[1][:-3], fList[i], fileList[i])) l = unittest.defaultTestLoader.loadTestsFromModule return unittest.TestSuite(map(l, modules)) if __name__ == "__main__": unittest.main(defaultTest="returnTests")
There's about a billion ways to extend this, make it more robust, etc., but it's a start. -- JeremyBowers