Python Mock - 检查是否从另一个 class 调用了方法?

Python Mock - check if method was called from another class?

当这些方法来自不同的 classes 时,如何检查是否在另一个方法中调用了方法?

如果他们来自同一个class,我可以这样做:

from unittest import mock

class A():
  def method_a(self):
    pass

  def method_b(self):
    self.method_a()

a = A()
a.method_a = mock.MagicMock()
a.method_b()
a.method_a.assert_called_once_with()

但是如果 method_a 来自不同的 class,那么它会引发 AssertionError 它没有被调用。

如果我要用这些 classes 来代替(我想检查 method_b 是否调用 method_a),我怎么能做同样的检查?:

class A():
  def method_a(self):
    pass

class B():
  def method_b(self):
    A().method_a()

您必须简单地在与 B 相同的上下文中对 A 进行存根,并根据调用它的方式进行验证。示例:

>>> class B():
...   def method_b(self):
...     A().method_a()
... 
>>> A = mock.MagicMock()
>>> A().method_a.called
False
>>> b = B()
>>> b.method_b()
>>> A().method_a.called
True
>>>