[TIP] MagicMocks and inequalities

Dan Wandschneider daniel.wandschneider at schrodinger.com
Mon Jan 28 11:16:07 PST 2013


Michael-
I just downloaded mock version 1.0.1 and it still appears that __lt__ is
not implemented.  I also still see the platform dependent behavior of
__lt__.  I've submitted this as
bug#196<http://code.google.com/p/mock/issues/detail?id=196>
.
Thanks-
 Dan W.



On Mon, Jan 28, 2013 at 10:48 AM, Dan Wandschneider <
daniel.wandschneider at schrodinger.com> wrote:

> Michael-
> Thanks for your response.  I'm using mock.py version 1.0.  I'll try to
> upgrade to mock 1.0.1, and if I still see this behavior, I'll definitely
> submit this as a bug.
>
> Note that your test didn't really demonstrate whether __lt__ was
> "implemented", since it would be called even if the return value were
> NotImplemented.  In my copy of mock.py (version 1.0), I see this:
> _return_values = {
>     '__lt__': NotImplemented,
>     '__gt__': NotImplemented,
>     '__le__': NotImplemented,
>     '__ge__': NotImplemented,
>    etc.
>
> And this behavior:
>
> >>> from mock import MagicMock
> >>> m = MagicMock()
> >>> m.__lt__
> <MagicMock name='mock.__lt__' id='47908705590288'>
> >>> m.__lt__()
> NotImplemented
> >>> m < 3
> False
> >>> m.__lt__.call_count
> 2
>
> Thanks again for this great tool,
>  Dan W.
>
>
>
>
>
>
>
> On Mon, Jan 28, 2013 at 3:28 AM, Michael Foord <fuzzyman at voidspace.org.uk>wrote:
>
>>
>> On 18 Jan 2013, at 19:52, Dan Wandschneider <
>> daniel.wandschneider at schrodinger.com> wrote:
>>
>> > Under Python 2.7.3 and Mock 1.0.0, we've noticed some strange behavior.
>>    On Linux, 0 < MagicMock(), and on Windows 0 > MagicMock().  Has anyone
>> else noticed similar behavior?  Should this be considered a bug?
>>
>> That would be a bug, yes. One I'm very surprised about. I don't think I
>> even have a working Windows VM to try this on though - so I'd be very
>> interested to see if anyone else can verify it.
>>
>> >
>> > Note that MagicMock does not implement the inequality comparison
>> operators, which means that in inequality comparisons it delegates the
>> comparison to the other object.  Thus, the expression "MagicMock() > 0" is
>> ultimately evaluated as "0 < MagicMock()."  See Lennert Regebro's cogent
>> post about total ordering.
>>
>> MagicMock *does* implement all the equality and comparison methods. The
>> one used in a "less than" test is __lt__ :
>>
>> >>> from mock import MagicMock
>> >>> m = MagicMock()
>> >>> m.__lt__
>> <MagicMock name='mock.__lt__' id='4300924432'>
>> >>> m < 0
>> False
>> >>> m > 0
>> True
>> >>> m.__lt__.call_count
>> 1
>>
>> All the best,
>>
>> Michael Foord
>>
>> > _______________________________________________
>> > testing-in-python mailing list
>> > testing-in-python at lists.idyll.org
>> > http://lists.idyll.org/listinfo/testing-in-python
>>
>>
>> --
>> 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://lists.idyll.org/pipermail/testing-in-python/attachments/20130128/e22f2adb/attachment-0001.htm>


More information about the testing-in-python mailing list