[Python-ideas] doctest
Michael Foord
fuzzyman at gmail.com
Tue Feb 28 00:31:17 CET 2012
More information about the Python-ideas mailing list
Tue Feb 28 00:31:17 CET 2012
- Previous message: [Python-ideas] doctest
- Next message: [Python-ideas] doctest
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 27 February 2012 23:23, Mark Janssen <dreamingforward at gmail.com> wrote: > On Mon, Feb 27, 2012 at 3:59 PM, Michael Foord <fuzzyman at gmail.com> wrote: >> >> As well as fundamental problems, the particular implementation of doctest >> suffers from these potentially resolvable problems: >> >> >>> Execution of an individual testing section continues after a failure. So >>> a single failure results in the *reporting* of potentially many failures. >>> >>> Hmm, perhaps I don't understand you. doctest reports how many failures > occur, without blocking on any single failure. > Right. But you typically group a bunch of actions into a single "test". If a doctest fails in an early action then every line after that will probably fail - a single test failure will cause multiple *reported* failures. > > >> The problem of being dependent on order of unorderable types (actually >>> very difficult to solve). >>> >> > Well, a crude solution is just to lift any output text that denotes an > non-ordered type and pass it through an "eval" operation. > Not a general solution - not all reprs are reversible (in fact very few are as a proportion of all objects). > > >> Things like shared fixtures and mocking become *harder* (although by no >>> means impossible) in a doctest environment. >>> >>> > This, I think, what I was suggesting with doctest "scoping" where the > execution environment is a matter of how nested the docstring is in > relation to the "python semantic environment", with a final scope of > "globs" that can be passed into the test environment, for anything with > global scope. > > >> Another thing I dislike is that it encourages a "test last" approach, as >>> by far the easiest way of generating doctests is to copy and paste from the >>> interactive interpreter. The alternative is lots of annoying typing of >>> '>>>' and '...', and as you're editing text and not code IDE support tends >>> to be worse (although this is a tooling issue and not a problem with >>> doctest itself). >>> >> > This is where I think the idea of having a test() built-in, like help(), > would really be nice. One could run test(myClass.mymethod) iterively while > one codes, encouraging TDD and writing tests *along with* your code. My > TDD sense says it couldn't get any better. > > >> More fundamental-ish problems: >> >> Putting debugging prints into a function can break a myriad of tests >> (because they're output based). >> > > That's a good point. But then it's a fairly simple matter of adding the > output device: 'print >> stderr, 'here I am'", another possibility, if TDD > were to become more of part of the language, is a special debug exception: > "raise Debug("Am at the test point, ", x)" Such special exceptions could > be caught and ignored by doctest. > > >> With multiple doctest blocks in a test file running an individual >> test can be difficult (impossible?). >> >> This again solved with the test() built-in an making TDD something that > is a feature of the language itself. > I don't fully follow you, but it shouldn't be hard to add this to doctest and see if it is really useful. > > >> I may be misremembering, but I think debugging support is also >> problematic because of the stdout redirection >> > > Interesting, I try to pre-conceive tests well enough so I never need to > invoke the debugger. > Heh. When I'm adding new features to existing code it is very common for me to write a test that drops into the debugger after setting up some state - and potentially using the test infrastructure (fixtures, django test client perhaps, etc). So not being able to run a single test or drop into a debugger puts the kybosh on that. Michael > > >> So yeah. Not a huge fan. >> >> That's good feedback. Thanks. > > Mark > -- http://www.voidspace.org.uk/ May you do good and not evil May you find forgiveness for yourself and forgive others May you share freely, never taking more than you give. -- the sqlite blessing http://www.sqlite.org/different.html -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-ideas/attachments/20120227/5b1e5d96/attachment.html>
- Previous message: [Python-ideas] doctest
- Next message: [Python-ideas] doctest
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list