<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, 23 Nov 2016 at 21:58 Saravanan Shanmugham &lt;<a href="mailto:sarvi@yahoo.com">sarvi@yahoo.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_msg"><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px" class="gmail_msg"><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" class="gmail_msg"><br class="gmail_msg"></div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" class="gmail_msg"><br class="gmail_msg"></div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">I am testing some code that is distributed across multiple modules. </div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">Each module imports a single method that I want to mock, </div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">Say check_call from subprocess or open from builtins.</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">I want to mock out these methods from the multiple modules with one mock object. </div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">Whats the best way to do it.</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">mopen=mock.MagicMock()</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg"># I don&#39;t want to see the following, where multiple mock open objects get passed</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">@patch(&#39;module1.open&#39;,new=mopen)</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">@patch(&#39;module2.open&#39;,new=mopen)</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">def test_case1(mopen1, mopen2):</div><div id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15409" dir="ltr" class="gmail_msg">    m1_open.side_effect  = [OSError]<br class="gmail_msg"></div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15676" class="gmail_msg">    m2_open.side_effect = [OSError]</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15677" class="gmail_msg"><div dir="ltr" style="margin-top:0.1em;margin-bottom:0.1em" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15691" class="gmail_msg">    # Test code</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15692" class="gmail_msg"><br id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15693" class="gmail_msg"></div></div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15600" class="gmail_msg">I want to see something like the following</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15600" class="gmail_msg">@patch.special([&#39;module1.open&#39;, &#39;module2.open&#39;, &#39;module3.open&#39;], new=mopen)</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15625" class="gmail_msg">@patch(&#39;module2.open&#39;,new=mopen)</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15626" class="gmail_msg">def test_case1(mopen):</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15700" class="gmail_msg">    mopen.side_effect = [OSError, OSError]</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15703" class="gmail_msg"></div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15627" class="gmail_msg">    &#39;# Test code</div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15628" class="gmail_msg"><br id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15629" class="gmail_msg"></div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15628" class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" id="m_-6791594809021733112yui_3_16_0_1_1479937189314_15628" class="gmail_msg">Is there a way to do this?</div></div></div></blockquote><div><br></div><div>You can patch it directly in builtins:</div><div><br></div><div>```<br></div><div>if sys.version_info.major == 2:</div><div>    # if you need to support python2</div><div>    import __builtin__ as builtins</div><div>else:</div><div>    import builtins</div><div><br></div><div><br></div><div>@patch.object(builtins, &#39;open&#39;, mopen)</div><div>def test_...</div><div>```</div></div></div>