我正在开发一个有一些 pytests 的项目,在其中一个测试中我有以下行:
mocked_class = Mock()
assert mocked_class.send.call_count == 1
现在我找不到代码中有人调用
send
方法的地方。
我尝试添加
mocked_class.send=my_method
并在其上添加打印或放置断点,但它不起作用。
看来我错过了一些东西
测试正在 python 3.8 上进行 与
import pytest
from mock import Mock
如何找到谁调用了这个方法? 调试此问题的任何其他帮助
send
可能不存在于您的代码中,因为它是 Mock
实例的一部分,并且您可以从 Mock
实例调用任意方法:
from unittest.mock import Mock
def test_1():
mocked_class = Mock()
mocked_class.wasda()
assert mocked_class.wasda.call_count == 1
test_1()
文档中有很多示例:https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock
您的代码还应该引发“AssertionError”,因为在断言语句之前没有调用
send
。
我想到了一种 hacky 的方法,但据我所知,它确实效果很好:
from unittest import mock
import traceback
class AdvancedCall(mock._Call):
original_call_class = mock._Call
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.where = traceback.format_stack()
mock._Call = AdvancedCall
然后你可以做...
mocked_class = Mock()
...
assert mocked_class.send.call_count == 1
mocked_class.send.mock_calls[0].where # Inspect this for the call stack