I've got a suite of unit tests for a web application. There's an (abstract) base test class from which all test cases derive:
class BaseSmokeTest(unittest.TestCase): BaseSmokeTest.setUpClass() fetches a UR (from a class attribute "route", which must be defined in the derived classes), and there's a number of test methods which do basic tests like checking for reaonable-looking HTML (parsed with lxml), scanning the server log file to make sure there's no error messages or stack dumps, etc. Many of the test cases are nothing more than running the base test methods on a particular route, i.e. class Test_Page_About(BaseSmokeTest): route = 'page/about' Now, I want to do something a little fancier. I want to get a particular page, parse the HTML to find anchor tags containing additional URLs which I want to test. It's easy enough to pull out the anchors I'm interested in with lxml: selector = CSSSelector('div.st_info .st_name > a') for anchor in selector(self.tree): print anchor.get('href') I can even create new test cases from these on the fly with something like: newClass = type("newClass", (BaseSmokeTest,), {'route': '/my/newly/ discovered/anchor'}) (credit to http://jjinux.blogspot.com/2005/03/python-create-new-class-on-fly.html for that neat little trick). The only thing I don't see is how I can now get unittest.main(), which is already running, to notice that a new test case has been created and add it to the list of test cases to run. Any ideas on how to do that? I suppose I don't strictly need to go the "create a new TestCase on the fly" route, but I've already got a fair amount of infrastructure set up around that, which I don't want to redo. -- http://mail.python.org/mailman/listinfo/python-list