On 12 Jun 2005 08:06:18 -0700, "George Sakkis" <[EMAIL PROTECTED]> wrote:
>"Jorgen Grahn" wrote: > >> I have a set of tests in different modules: test_foo.py, test_bar.py and so >> on. All of these use the simplest possible internal layout: a number of >> classes containing test*() methods, and the good old lines at the end: >> >> if __name__ == "__main__": >> unittest.main() >> >> This is great, because each of the modules are runnable, and I can select >> classes or tests to run on the commandline if I want to. However, running >> all the tests from e.g. a Makefile is not that fun; I don't get a single >> pass/fail summary across the modules. >> >> What's the best way of creating a test.py which >> - aggregates the tests from all the test_*.py modules? >> - doesn't require me to enumerate all the test classes in test.py >> (forcing each module to define test_foo.theSuite or someting would >> be OK though) >> - retains the ability to select tests and verbosity (-q, -v) from the >> command line? >> >> Something like: >> >> import unittest >> import test_foo >> import test_bar >> >> if __name__ == "__main__": >> unittest.main(modules = ['test_foo', >> 'test_bar']) >> >> Seems to me this should be possible, since all the logic for doing it /is/ >> there for the local module; I'd assume there would be a way to make unittest >> search additional modules for test classes. But my head starts spinning >> when I read the source code ... > >I had written a script to do something close to this; currently it >doesn't do any kind of aggregation, but it should be easy to extend it >as you like. What I don't like is the way it currently works: it >replaces sys.modules['__main__'] for each unit test and then it >execfile()s it, which seems like a hack. I didn't look into unittest's >internals in case there is a more elegant way around this; if there >isn't, a future version of unittest should address the automatic >aggregation of tests, as py.test does already. > >The link to the script is http://rafb.net/paste/results/V0y16g97.html. > I think if you execfile a script and supply the global dict initialized to {'__name__':'__main__'} then I think that will satisfy the if __name__ ... condition and the whole thing will run as if executed interactively from the command line. So IWT you could just loop through a list of test modules doing that. Haven't tried it though. E.g., maybe there are nasty reload problems for shared modules among different tests? Regards, Bengt Richter -- http://mail.python.org/mailman/listinfo/python-list