Hi Philippe, Neil,
On Fri, Apr 24, 2009 at 14:45 +0200, Philippe Fremy wrote:
> Neil Shepperd wrote:
> > Hi,
> >
> >> I have found that storing the results of the call I want to test the
> >> result of, and then asserting the result generally eliminates these
> >> errors.
> >>
> >> For example:
> >>
> >> assert Foo() == 23
> >>
> >> often caused me problems with that message, however:
> >>
> >> foo = Foo()
> >> assert foo == 23
> >>
> >> would not.
> >>
> >> I am not sure why that is the case but I was able to resolve the issue
> >> using the second form.
> > If I understand it correctly, the test handling magic evaluates each
> > part of the expression again, to display it in the fail traceback.
> > For example, in the traceback of some test it will say:
> >
> > def test_xxx():
> > E assert Foo() == 23
> >> assert 0 == 23
> >
> > If Foo() returns 0. It is run again get the value 0 to substitute into
> > the error message. However if the second time it is run Foo() actually
> > works correctly and returns 23, this value is obviously not correct,
> > because if it were the assert would have passed.
> >
> > I suspect maybe py.test is evaluating t.isAlive() again to substitute
> > into the if-expression, resulting in confusion when the result changes
> > to True. If that is the case, you might have to do something like
> >
> > checker.stop( False )
> > is_alive = t.isAlive()
> > is_finished = checker.isFinished()
> > if not is_alive: assert False
> > if is_finished: assert False
> >
> >
> > Hope this made sense,
>
> Thanks, it makes sense now on the cause of the error. This ought to be
> documented somewhere in py.test
i agree, the error message is slightly mysterious. what about this:
def test_inconsistent():
def f(l=[1,0]):
return l.pop()
> assert f()
E AssertionError: (assert failed but re-evaluating the
assert expression for printing intermediate values lead to a
True value. advise: avoid side-effects in assert expressions
or use --nomagic)
It's a bit longish but i doubt people encountering the problem
would know where to lookup things in the documentation.
Any other suggestion for the error message?
cheers,
holger
> cheers,
>
> Philippe
>
> _______________________________________________
> py-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/py-dev
>
--
Metaprogramming, Python, Testing: http://tetamap.wordpress.com
Python, PyPy, pytest contracting: http://merlinux.eu
_______________________________________________
py-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/py-dev