chris wrote: > We have a number of TestCase classes that have multiple test methods. > We are interested in removing any of the individual test methods on the > fly (dynamically, at runtime, whatever). > > We currently have an "isSupported" method in the TestCase classes that > return a bool by which the greater test harness decides whether to run > the enclosed test methods or not. We would like to have > per-test-method granularity, however, for essentially skipping that > particular test method; basically another isSupported call within the > individual methods. We took a quick look at such options as: > generating the entire test suite, then iterating through and renaming > SomeTestClass.testSomeTest to SomeTestClass.SKIPsomeTest, and seeing if > PyUnit would skip it (since the method name no longer starts with > "test"). But this seemed pretty unwieldy. We have also considered > breaking up the test class to a number of smaller test classes and > calling isSupported with that finer-granularity set of test classes. > That is probably the easiest way, but we do still want to consider > alternatives.
ISTM you could write a custom TestLoader that filters the test names, then pass that loader to unittest.main(). For example, assuming a classmethod or staticmethod on the test case that filters test case names, something like this (not tested): def MyTest(TestCase): @staticmethod def isSupportedTest(testName): return True def testSomething... class FilteringTestLoader(TestLoader): def getTestCaseNames(self, testCaseClass): names = TestLoader.getTestCaseNames(self, testCaseClass) names = filter(testCaseClass.isSupportedTest, names) return names unittest.main(testLoader=FilteringTestLoader()) You could do something similar with a FilteringTestSuite if that fits your harness better. Kent -- http://mail.python.org/mailman/listinfo/python-list