[ANN] Metatest 0.1.0

Ben Finney bignose+hates-spam at benfinney.id.au
Tue Sep 18 21:46:29 EDT 2007


[Jonathan, please don't send me copies of messages sent to the
discussion thread. I follow comp.lang.python via a non-mail interface,
and it's irritating to get unwanted copies of messages via email.]

Jonathan Fine <jfine at pytex.org> writes:

> Ben Finney wrote:
> > Jonathan Fine <jfine at pytex.org> writes:
> >>    plus(2, '', _ex=TypeError)
> >
> > This second example seems counterintuitive. Is '_ex' part of the
> > public interface? If so, why does it follow the convention for
> > "not part of the public interface" (i.e. it is named with an
> > underscore)?
> 
> [...]
> The line
>      plus(2, '', _ex=TypeError)
> causes something to be recorded, and when the test is run the _ex
> argument is filtered off, and the remaining arguments passed to the
> plus function, as imported from mymod.

That's confusing, then, for two reasons:

It looks like '_ex' is an argument to the 'plus' function, which
otherwise (probably by design) looks exactly like a call to the 'plus'
function the programmer is testing. Since this is, instead, an
assertion *about* that function, it is misleading to see it as an
argument *to* the function.

It uses the "leading-underscore" convention which means "this is not
part of the public interface, and you'd better know what you're doing
if you use this externally".

> Finally, if you can think of a better way of saying, in Python, "The
> function call plus(2, '') raises a TypeError", please let me know,
> and I'll consider using it in the next version of Metatest.

I would think an explicit function call that says what it's doing
would be better. The unittest module implements this as:

    self.failUnlessRaises(TypeError, plus, 2, '')

or more generally:

    func = plus
    func_args = [2, '']
    self.failUnlessRaises(TypeError, func, *func_args)

which has the benefit of being explicit about what it's doing.

-- 
 \                     "Sometimes I -- no, I don't."  -- Steven Wright |
  `\                                                                   |
_o__)                                                                  |
Ben Finney



More information about the Python-list mailing list