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

pytest中如何验证mock返回对象的private_bytes方法是否被调用一次

你需要获取serialization.load_pem_private_key返回的mock实例,再对该实例的private_bytes方法做调用断言即可,调整后的测试代码如下:

@patch("builtins.open", new_callable=mock_open)
def test_get_private_key(mock_open, mocker, key_path="my/path"):
    # 拿到mock后的serialization对象
    mock_serialization = mocker.patch.object(subject, "serialization")
    # 提取load_pem_private_key返回的mock p_key实例
    mock_p_key = mock_serialization.load_pem_private_key.return_value

    # 调用被测函数,若你实际被测函数是get_sf_connection,请补全所有必填参数
    subject._get_private_key(key_path)

    # 原有断言
    mock_open.assert_called_with(key_path, "rb")
    mock_serialization.load_pem_private_key.assert_called_once()
    # 新增断言:验证private_bytes调用次数和参数是否符合预期
    mock_p_key.private_bytes.assert_called_once_with(
        encoding=mock_serialization.Encoding.DER,
        format=mock_serialization.PrivateFormat.PKCS8,
        encryption_algorithm=mock_serialization.NoEncryption(),
    )

逻辑说明

你mock了整个serialization模块后,load_pem_private_key的默认返回值是一个MagicMock实例,我们将这个实例单独提取出来,就能跟踪它身上所有方法的调用情况。上述代码不仅验证了private_bytes被调用了一次,同时还验证了传参和预期一致,比仅验证调用次数的覆盖度更完整。

注意:如果你实际调用的是贴出的get_sf_connection函数,需要补全usr、acc、vwh、db四个必填入参,否则会触发参数缺失报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 16:06:03