[TIP] Using one unit test with different input parameters
Pete
pfein at pobox.com
Tue Feb 19 10:59:40 PST 2008
On Tuesday February 19 2008 1:18:14 pm Robert McHardy wrote:
> The client has 28 sites that are very similar. I'd rather not have
> to clone the test script 28 times with different hard-coded domain
> details... but I can't figure out how to pass in different
> parameters to the unit test - e.g. a different DOMAIN dict with data
> for other sites, and have the tests run on that domain instead.
This sounds really similar to a problem/solution I posted a few months back on
the nose list I called "Generic Tests". Basically, my idea was to have a
factory_tests() function that returned TestCase classes derriving from a
BaseTest that did the actual work. Some code might make more sense:
def factory_test(domain_dict):
class _TestCase(Site_BaseTest):
domain_dict=domain_dict
def test_it():
assert do_stuff(cls.domain_dict['DOMAIN'])
...
return _TestCase
and then in your test module, you do factory_test(dd for dd in
list_of_domain_dicts). You'll need to get the resulting classes executed by
your test harness tho - for nose, that consisted of giving them unique,
nose-friendly names. If you're using unittest, there's some way of
explicitly running TestCases that I don't know off the top of my head.
Has anyone else used this technique? Got a name for it? My use case was
testing different implmenations of a public API, but the approach seems like
it could be useful in a bunch of cases.
--
Peter Fein || 773-575-0694 || pfein at pobox.com
http://www.pobox.com/~pfein/ || PGP: 0xCCF6AE6B
irc: pfein at freenode.net || jabber: peter.fein at gmail.com
More information about the testing-in-python
mailing list