[TIP] How do I run the same test on many different classes?

Olemis Lang olemis at gmail.com
Mon Dec 14 05:49:56 PST 2009


Hello !

On Sun, Dec 13, 2009 at 2:45 PM, Matthew Wilson <matt at tplus1.com> wrote:
> This is one of those problems that I know how to solve in an ugly way,
> but I want to learn a better way.
>
> I need to write a class that acts like a dictionary with some other
> tweaks bolted on.
>

First of all , there's a way (in stdlib test suite ;o) to test that
custom mapping objects conform to the protocol ...

> I wrote a single unittest.TestCase class that tests for all the
> features I care about.  Pretend that the TestCase subclass is called
> TestTask and the class I want to make will be named Task.
>
> I have several ideas about how to build this class and I want to use
> the TestTask class as a pass-fail filter.  Pretend I'll name each idea
> Task1, Task2, Task3, etc.
>
> Then I want to pass Task1, Task2, etc into unittest.TestCase so it
> would run the tests on an instance of that class.
>
> I experimented with something like this:
>
>    >>> import task, test_task, unittest
>    >>> Task = task.Task1
>    >>> tl = unittest.TestLoader()
>    >>> tl.loadTestsFromModule(test_task)
>    >>> suite = tl.loadTestsFromModule(test_task)
>    >>> unittest.TextTestRunner().run(suite)
>
> Of course, that blows up because my test_task.TestTask class depends
> on a global Task class that isn't defined when I defined that module.
>

I am supposing that you want to write (abstract) test cases once and
execute (real) tests using instances of different concrete classes
that have to behave the same way . If this is the case then I can
suggest you two things :

  - take a look at the stdlib tests for mapping objects I mentioned before
  - Write a loader that instantiates the test suite once and then
clone (deep copy) it
    for each concrete concrete class. This is the approach I employed
to perform a
    benchmarking for design by contract libraries . DBC semantics are
always the
    same so they all have to do things the same way too ;o)
    I've mentioned that before several times , searching the archive might give
    you further ideas ;o)

If I didn't understand or am missing something , please let me know ;o)

-- 
Regards,

Olemis.

Blog ES: http://simelo-es.blogspot.com/
Blog EN: http://simelo-en.blogspot.com/

Featured article:
olemis changed the public information on the FLiOOPS project  -
http://feedproxy.google.com/~r/flioops/~3/2oEVcZIoLdQ/flioops



More information about the testing-in-python mailing list