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

无需逐一Mock,如何在复杂调用中追踪函数调用并验证调用情况?

测试复杂函数中指定函数的调用情况

我完全不在意执行过程中出现的任何异常,现在需要测试一个会调用多个子函数的复杂函数:验证在传入特定输入参数时,某些指定的嵌套函数是否被正确调用。

思路一:捕获异常并验证Mock调用

通过@patch替换目标函数为异步Mock,执行复杂函数时捕获所有异常,最后验证指定Mock的调用情况:

@patch(
    "service.module.class.some_nested_function_1",
    new_callable=AsyncMock,
)
@patch(
    "service.module.class.some_nested_function_2",
    new_callable=AsyncMock,
)
@pytest.mark.asyncio
async def test_complex_function(function2_mock, function1_mock):
    some_param = "abc"
    another_param = "xyz"
    try:
        call_complex_function("with_some_configuration")
    except:
        abort_crashing_function_and_continue_execution_in_complex_function()
    assert function2_mock.assert_called_once_with(some_param)
    assert function1_mock.assert_called_once_with(another_param)

思路二:Mock所有无关函数避免异常

通过Mock除复杂函数本身之外的所有函数调用,让它们返回默认值(比如0),这样执行复杂函数时不会触发异常,直接验证指定Mock的调用情况:

...
async def test_complex_function(function2_mock, function1_mock):
    ...
    mock_every_function_call_except_complex_function_to_return_zero()
    call_complex_function("with_some_configuration")
    assert function2_mock.assert_called_once_with(some_param)
    assert function1_mock.assert_called_once_with(another_param)
    ...
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:45:58