[TIP] Mocking import functions

Bruno Oliveira nicoddemus at gmail.com
Fri Feb 7 14:03:53 PST 2014


Mahdi,

Hmmm there's something fishy here... I trimmed down your example as best as
I could and I could not reproduce the problem you're having. Please take a
look: https://gist.github.com/nicoddemus/d100e3659db7fdddf691

As the py.test output shows, mocking the twitter module works. The approach
I suggested should also have worked (see Gist comments). Which version of
the mock module are you using?

Cheers,


On Fri, Feb 7, 2014 at 7:02 PM, Mahdi Yusuf <yusuf.mahdi at gmail.com> wrote:

> Bruno,
>
> I would like to avoid changing code, especially without a reason. I have
> already tried this route and doesn't work (tried it again now, for human
> error). :) mechanize_url still runs as implemented.
>
> Thanks for your response.
>
> --
> Mahdi Yusuf
>
>
> On Fri, Feb 7, 2014 at 3:43 PM, Bruno Oliveira <nicoddemus at gmail.com>wrote:
>
>> Hi Mahdi,
>>
>> If you can change your code, try to import the module instead of the
>> function in twitter_profile.py:
>>
>> from miners import task_utils
>>
>> And use it as such in the code.
>>
>>       try:
>>
>>
>>
>>
>>           html = task_utils.mechanize_url(url)
>>
>>
>>
>>
>>       except:
>>
>>
>>
>>
>>           ...
>>
>>
>> Then mocking using mock.patch('miners.tasks_utils.mechanize_url') should work.
>>
>>
>>
>>
>>
>>
>> Hope this helps,
>>
>>
>>
>> On Fri, Feb 7, 2014 at 2:18 PM, Mahdi Yusuf <yusuf.mahdi at gmail.com>wrote:
>>
>>> David,
>>>
>>> Thanks for your response. I tried that when I was exhausting all my
>>> options. That also doesn't work.
>>>
>>> --
>>> Mahdi Yusuf
>>>
>>>
>>> On Fri, Feb 7, 2014 at 11:07 AM, David Stanek <dstanek at dstanek.com>wrote:
>>>
>>>> Instead of mock.patch('miners.tasks_utils.mechanize_url') you should
>>>> try mock.patch('twitter_profile.mechanize_url').
>>>>
>>>> Once your twitter_profile module is imported it will have a reference
>>>> to mechanize_url.  When you patch miners.tasks_utils you are not changing
>>>> this reference.
>>>>
>>>>
>>>>  On Fri, Feb 7, 2014 at 10:42 AM, Mahdi Yusuf <yusuf.mahdi at gmail.com>wrote:
>>>>
>>>>>  I am at my wits end pretty much. I am not sure what is happening
>>>>> here.
>>>>>
>>>>> I am unable to mock an import function. My code is here<https://gist.github.com/myusuf3/685083e70bf3f93fd43c>.
>>>>> After some reading I know you patch where the function is used not where
>>>>> its defined.
>>>>>
>>>>> I have also tried everything else but the mechanize_url is till
>>>>> running as implemented in code not mocked in test.
>>>>>
>>>>> Thoughts?
>>>>>
>>>>> --
>>>>> Mahdi Yusuf
>>>>>
>>>>> _______________________________________________
>>>>> testing-in-python mailing list
>>>>> testing-in-python at lists.idyll.org
>>>>> http://lists.idyll.org/listinfo/testing-in-python
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> David
>>>> blog: http://www.traceback.org
>>>> twitter: http://twitter.com/dstanek
>>>> www: http://dstanek.com
>>>>
>>>
>>>
>>>
>>> --
>>> Mahdi Yusuf
>>>
>>> _______________________________________________
>>> testing-in-python mailing list
>>> testing-in-python at lists.idyll.org
>>> http://lists.idyll.org/listinfo/testing-in-python
>>>
>>>
>>
>
>
> --
> Mahdi Yusuf
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20140207/52805825/attachment.htm>


More information about the testing-in-python mailing list