[TIP] Reusable test suites in nose

Michael Williamson mike at zwobble.org
Mon Jan 7 12:31:26 PST 2013


Thanks for the pointer. I considered using them, but couldn't see a
clear way of creating a *reusable* test suite. I'm assuming a usage
something like:

    def test_feature_generator():
        for implementation in implementations:
            yield test_feature, implementation

But that requires you to know all of the implementations up-front. Is
that what you were thinking of?

I also don't know how you'd run a single test case i.e. how would you
tell nose to run that test with a specific implementation?

On Mon, 07 Jan 2013 12:53:59 -0500
Tom Davis <tom at recursivedream.com> wrote:

> Perhaps you're looking for test generators?
> 
> http://nose.readthedocs.org/en/latest/writing_tests.html#test-generators
> 
> Andres Riancho writes:
> 
> > Michael,
> >
> >     I've found myself in your situation before and I've solved it by
> > doing the following:
> >
> > Define a Generic test class that holds all tests you want to run on
> > all the different implementations, and decorate each test with
> > @only_if_subclass:
> >     http://sourceforge.net/apps/trac/w3af/browser/branches/threading2/core/data/bloomfilter/tests/generic_filter_test.py
> >
> > Where @only_if_subclass is defined as:
> >     http://sourceforge.net/apps/trac/w3af/browser/branches/threading2/core/controllers/tests/pylint_plugins/decorator.py
> >
> > Then, simply create your specific tests that inherit from the
> > generic test class:
> >     http://sourceforge.net/apps/trac/w3af/browser/branches/threading2/core/data/bloomfilter/tests/test_cmmap_bloom.py
> >
> >     only_if_subclass is where the (vodoo) magic lives, it makes sure
> > the test is only run in the subclass (the ones defined in
> > test_cmmap_bloom.py for example) and not in the generic test class.
> >
> > Regards,
> >
> > On Mon, Jan 7, 2013 at 8:58 AM, Michael Williamson
> > <mike at zwobble.org> wrote:
> >> Hello,
> >>
> >> When writing different implementations of the same interface, it's
> >> useful to be able to run the same test suite against each different
> >> implementation. I've quickly knocked up a bit of code to do just
> >> that with nose -- is there something similar that already exists
> >> elsewhere?
> >>
> >> The way it works is:
> >>
> >> There's a class called TestSuiteBuilder, which collects up all the
> >> tests:
> >>
> >> https://github.com/mwilliamson/peachtree/blob/7724d6176cdc574208c771fec6d75ff736259d48/tests/suite_builder.py
> >>
> >> You then define your tests, which accept some number of arguments.
> >> The idea is that the exact implementation of those arguments is
> >> what will vary. In this case, I'm testing a general interface for
> >> a virtual machine provider.
> >>
> >> https://github.com/mwilliamson/peachtree/blob/7724d6176cdc574208c771fec6d75ff736259d48/tests/provider_tests.py
> >>
> >> Then, you instantiate a test class with a specific implementation
> >> using the "create" method:
> >>
> >> https://github.com/mwilliamson/peachtree/blob/7724d6176cdc574208c771fec6d75ff736259d48/tests/qemu_tests.py
> >>
> >> Michael
> >>
> >> _______________________________________________
> >> testing-in-python mailing list
> >> testing-in-python at lists.idyll.org
> >> http://lists.idyll.org/listinfo/testing-in-python
> 



More information about the testing-in-python mailing list