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

使用pytest与mock模拟第三方类时遇断言失败问题求助

问题分析与解决:unittest.mock模拟第三方类时断言失败

你的核心问题是断言对象找错了:

  • 你mock的Reader是类本身,当代码里执行j = systemd.journal.Reader()时,mock类会生成一个全新的MagicMock实例(也就是j),j.this_boot()调用的是这个实例的方法,和Reader类本身的this_boot属性完全无关。
  • 你现在断言的是Reader.this_boot,但实际被调用的是实例的this_boot,所以断言永远失败。

修正后的测试代码

from unittest.mock import patch
import pytest
from journalwatcher.journal import read_for_test

@patch("systemd.journal.Reader")
def test_read(Reader):
    # 获取mock类实例化后返回的对象(对应待测试代码里的j)
    mock_reader_instance = Reader.return_value
    read_for_test(this_boot_only=True)
    # 针对实例的this_boot方法做断言
    mock_reader_instance.this_boot.assert_called_once()

关键说明

  • 用@patch mock类时,被mock的类是一个MagicMock,它的return_value属性存储了每次实例化时返回的mock对象。
  • 所有对实例方法的调用,都需要通过return_value去访问并断言,而不是直接操作mock类本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:43:24