[TIP] suite, test_suite, load_tests ... Oh My ! WAS: unittest2 discovery / doctest integration?

Olemis Lang olemis at gmail.com
Tue May 4 10:02:37 PDT 2010


On 5/4/10, Michael Foord <fuzzyman at voidspace.org.uk> wrote:
> On 04/05/2010 12:29, Chris Withers wrote:
>
> > Michael Foord wrote:
> >
> > > Using load_tests seems like the best way to integrate doctests with
> > > unittest
> >
> > How does this match up with provided a test_suite function in the
> > module containing tests?
> >
> > I really hope that still works since it's a common paradigm supported
> > by at least trial and zope.testrunner.
> >
>
>  Have you tried it? :-) (Short story - it still works but isn't, and never
> was, used by the unittest test loader for loading tests from a module.)
>

AFAICS nobody mentioned unittest before (in the last few entries ) .
This convention is related to `setuptools` test command . IMHO once
upon a time `unittest` discovery should not have ignored this
convention deliberately in order to impose `load_tests` usage , but
...

This is an old subject , but I want to bring it back to life 'cause I
discovered the (probable) intention of the formerly documented
(PyUnit) `suite` function supplied in to `unittest.main` . I did so
after reviewing Trac XmlRpcPlugin code (yes, Trac guys are smarter
than me :P )
The following code was in a leaf test module (before recently released
XmlRpcPlugin 1.1.0 adding pluggable multi-protocol RPC architecture) :

{{{
#!python

def suite():
    return unittest.makeSuite(RpcWikiTestCase)

if __name__ == '__main__':
    unittest.main(defaultTest='suite')

}}}

which is similar to what was documented in old docs. Besides in
top-level test module code looks like (kind of ;o)

{{{
#!python

def suite():
        suite = unittest.TestSuite()
        import tracrpc.tests.api
        suite.addTest(tracrpc.tests.api.suite())
        import tracrpc.tests.xml_rpc
        suite.addTest(tracrpc.tests.xml_rpc.suite())
        import tracrpc.tests.json_rpc
        suite.addTest(tracrpc.tests.json_rpc.suite())
        import tracrpc.tests.ticket
        suite.addTest(tracrpc.tests.ticket.suite())
        import tracrpc.tests.wiki
        suite.addTest(tracrpc.tests.wiki.suite())
        import tracrpc.tests.web_ui
        suite.addTest(tracrpc.tests.web_ui.suite())
        return suite

}}}

That's what suite was for in first place (even if that convention was
not enforced by unittest by default ;o)



More information about the testing-in-python mailing list