擅长:python、mysql、java
<blockquote>
<p>Somehow, I think that the mymock.b() has nothing to do with the method b() What can be done for this?</p>
</blockquote>
<p>你说得对。当你模仿一个对象时,你是在暗示你不在乎你的模仿在幕后做什么。如果要确保从<code>b</code>调用<code>a</code>,则需要在<code>b</code>中<a href="http://www.voidspace.org.uk/python/mock/patch.html" rel="nofollow">patch</a><code>a</code>。</p>
<pre><code>>>> from mock import patch
>>> with patch('__main__.a') as patch_a:
... b()
... patch_a.assert_called_with()
</code></pre>
<p>所以,这个故事的寓意是,模仿或修补你想测量的对象而不是你关心的对象实现。在本例中,您关心<code>b</code>,并希望了解它如何使用<code>a</code>。既然我们不在乎<code>a</code>做什么,只要它被调用,我们就可以修补它。</p>
<p>此外,如果您希望获得有关对a的调用的更多详细信息,而不是<code>assert_called_with</code>,则可以通过访问patches<code>mock_calls</code>属性来分析所有调用。在这种情况下应该是<code>patch_a.mock_calls</code>。</p>