[py-dev] py.test: broken assert evaluate twice
Maciek Fijalkowski
fijal at genesilico.pl
Thu Aug 30 11:05:07 CEST 2007
Immanuel Scholz wrote:
>>> i = 1
>>> def foo():
>>> global i
>>> i += 1
>>> return i
>>>
>>> def test_foo():
>>> assert foo() == 3
>>>
>>>
>>> Is there a common solution to this, other than the annoying
>>>
>>> foo_result = foo()
>>> assert foo_result == 3
>>>
>>> thingie? Maybe py.test could preemptive cache all calls to assert
>>> beforehand? Is this possible?
>>>
>> It's sophisticated, as long as it's lazy - ie when assert works (is not
>> broken) there is no magic at all. There are few solutions. One is the
>> above solution, and we do this all the time in pypy. Other one is to use
>> --nomagic, but you don't get all nice info out of that :)
>>
>
> --nomagic isn't a cute solution either, as you get no information at all
> about the problem, and when people unaware of this run the test code
> without the option, they still get false information.
>
> I was thinking of a more comfortable solution. Is it possible in python
> to capture the assert call before it is made and cache the argument and
> then call to the original "assert"? This way, you don't have to remember
> to cache the call everytime yourself.
>
>
> The stuff is most annoying when testing functions that are some kind of
> generator and spits out another value on each call.
>
> Ciao, Imi.
>
>
I don't know :) I can help you dig into codebase if you would like to
(btw, our primary channel is IRC for such things, as it's way easier,
#pylib on irc.freenode.net)
Cheers,
fijal
:.
More information about the Pytest-dev
mailing list