擅长:python、mysql、java
<p>经过一些测试,我找到了问题所在。</p>
<p>在第二个测试用例中,补丁装饰器创建一个模拟类的新实例,并通过Mock_hook参数将其传递给test_execute2函数。让我们称之为mock1。mock1替换HookTransfer.py中的Hook类。当运行<code>self.hook = Hook()</code>时,它转换为调用mock1的<code>__init__</code>。按设计,这将返回另一个模拟实例-让我们将其称为mock2。所以self.hook指向mock2。但是<code>mock_hook.get_key = mock.Mock(return_value="New_Key")</code>,模拟mock1中的方法。</p>
<p>为了正确模拟,需要修补mock2。这有两种方法</p>
<ol>
<li>通过模拟mock1的返回值(返回mock2)<code>mock_hook.return_value.get_key = mock.Mock(return_value="New_Key")</code></li>
<li>模拟mock1(返回mock2)的构造函数的返回值<code>mock_hook().get_key = mock.Mock(return_value="New_Key")</code></li>
</ol>
<p>两个选项实际上做了同样的事情。</p>