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

cheers,

Philippe

_______________________________________________
py-dev mailing list
py-dev@codespeak.net
http://codespeak.net/mailman/listinfo/py-dev

Reply via email to