You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pytest测试接收函数参数的方法并断言调用情况?

测试Callable参数的最优方案:使用Mock对象

直接用Python标准库的unittest.mock.Mock(或pytest专属的pytest-mock fixture)就能完美解决你的问题,Mock本身就是Callable类型,会自动记录所有调用细节,包括调用次数、传入参数,无需自定义多个空函数。

方案1:使用标准库unittest.mock.Mock

from unittest.mock import Mock
from your_module import Certificate

def test_certificate_upload_calls_callback():
    # 创建Mock对象(本身就是Callable)
    mock_callback = Mock()
    cert = Certificate()

    # 调用upload方法,传入mock回调
    cert.upload(mock_callback)

    # 断言回调被调用过
    assert mock_callback.called
    # 断言回调被调用了1次
    mock_callback.assert_called_once()
    # 如果upload会给回调传特定参数,还能断言参数匹配
    # mock_callback.assert_called_with(expected_arg1, expected_arg2)

方案2:使用pytest-mock fixture(更简洁)

如果你的项目已经用pytest,推荐用pytest-mock提供的mocker fixture,它封装了unittest.mock,无需手动导入Mock,还会自动清理mock对象:

from your_module import Certificate

def test_certificate_upload_with_mocker(mocker):
    # 创建mock回调
    mock_callback = mocker.Mock()
    cert = Certificate()

    cert.upload(mock_callback)

    # 断言调用次数
    mock_callback.assert_called_once()
    # 检查调用时的参数(比如upload给回调传了"cert_data")
    assert mock_callback.call_args == mocker.call("cert_data")

关键优势

  • 无需为不同场景写多个空函数,一个Mock对象就能复用
  • 直接通过Mock的内置方法断言:assert_called()、assert_called_once()、assert_called_with()、assert_called_once_with()
  • 可以通过mock_callback.call_count获取调用次数,mock_callback.call_args获取最后一次调用的参数,mock_callback.call_args_list获取所有调用的参数列表

内容的提问来源于stack exchange,提问作者BL_NK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:37:01