Hello, I decided to re-use functionality of "unittest" module for my purposes. More precisely, I have a list of folders. For each folder, code should enter to the folder, execute a command and assert the output. It's reasonable to use "unittest" here, but the problem is that "unittest" doesn't support (== I haven't found how) dynamic creation of tests.
I thought it would be very easy, but due to lack of closures in Python (more precisely, closures do exist, but they are counter-intuitive for lisp programmers), I failed. Finally, I found a way using a global variable. I exploit the fact that "unittest" uses "cmp" to arrange test cases. Therefore, if we have an array of test names and sequential number of running the common function, we know the name of the current test. Here is a sample code: ------- <dynamic_unittest.py> import sys, unittest test_names = ['aaa', 'ddd', 'bbb'] test_names.sort() test_index = 0 class DynamicTestCase(unittest.TestCase): def one_test(self): global test_index test_name = test_names[test_index] test_index = test_index + 1 # Ok for 'aaa' and 'bbb', failure for 'ddd' assert test_name in ['aaa', 'bbb'] for test_name in test_names: func_name = 'test_' + test_name setattr(DynamicTestCase, func_name, DynamicTestCase.one_test) suite = unittest.makeSuite(DynamicTestCase, 'test_') if not unittest.TextTestRunner().run(suite).wasSuccessful(): sys.exit(1) ------- </dynamic_unittest.py> I think this code might help others, so I post it to the group. Comments are welcome. -- Oleg Parashchenko olpa@ http://xmlhack.ru/ XML news in Russian http://uucode.com/blog/ Generative Programming, XML, TeX, Scheme XSieve at XTech 2006: http://xtech06.usefulinc.com/schedule/detail/44 -- http://mail.python.org/mailman/listinfo/python-list