[Zope] Debugging doctests

Lennart Regebro regebro at gmail.com
Thu Feb 23 08:13:49 EST 2006

On 2/23/06, Stephan Richter <srichter at cosmos.phy.tufts.edu> wrote:
> How do you want to use the debugger?

I'd like to be able to step through the tests.

> I run the tests, if the set_trace()
> occurs it throws me to the prompt and all is fine. I can use the debugger as
> usual.

When I do this, I get a prompt. Pressing next returns to the running
of the tests, not the next line of the test. Here is an example:

      >>> import pdb;pdb.set_trace()
      >>> gsm = zope.component.getGlobalSiteManager()
      >>> gsm.provideUtility(I1, ob)
      >>> gsm.provideUtility(I11, ob11)

When I run this, my debuggning session looks like this:

$ bin/zopetest --dir zope/component
Running unit tests:
> /opt/Zope-3.2.0/lib/python/zope/testing/doctest.py(351)set_trace()->None
-> pdb.Pdb.set_trace(self)
(Pdb) s
> <doctest zope.component.tests.test_getAllUtilitiesRegisteredFor[4]>(1)?()->None
-> import pdb;pdb.set_trace()
(Pdb) s
> /opt/Zope-3.2.0/lib/python/zope/testing/doctest.py(1257)__run()
-> self.debugger.set_continue() # ==== Example Finished ====
(Pdb) s
> /opt/Zope-3.2.0/lib/python/zope/testing/doctest.py(353)set_continue()
-> def set_continue(self):
(Pdb) s
> /opt/Zope-3.2.0/lib/python/zope/testing/doctest.py(356)set_continue()
-> if self.__debugger_used:
(Pdb) s
> /opt/Zope-3.2.0/lib/python/zope/testing/doctest.py(357)set_continue()
-> pdb.Pdb.set_continue(self)
(Pdb) s
> /usr/lib/python2.4/bdb.py(196)set_continue()
-> def set_continue(self):
(Pdb) s
> /usr/lib/python2.4/bdb.py(198)set_continue()
-> self.stopframe = self.botframe
(Pdb) s

As you see, I can't even step into that next line. And even if I
could, the necessity of having to step through the doctestrunning
would be a major pain in the ass.

Here is a non-doctest exampe as comparison. This is what I want:

        import pdb;pdb.set_trace()
        sm = zapi.getSiteManager()
        sm.registerUtility(IDummyUtility, dummy1)
        sm.registerUtility(IDummyUtility, dummy2)

-> sm = zapi.getSiteManager()
(Pdb) n
-> sm.registerUtility(IDummyUtility, dummy1)
(Pdb) n
-> sm.registerUtility(IDummyUtility, dummy2)
(Pdb) s
> /home/zopes/cps34/Products/Five/site/localsite.py(147)registerUtility()
-> def registerUtility(self, interface, utility, name=''):

I can't seem to be able to do this.

> There used to be an issue with the debugger not displaying anything, since
> doctests mess with stdout and that has been fixed. This is what Benji and I
> were talking about.


Lennart Regebro, Nuxeo     http://www.nuxeo.com/
CPS Content Management     http://www.cps-project.org/

More information about the Zope mailing list