使用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()
关键说明
- 用
@patchmock类时,被mock的类是一个MagicMock,它的return_value属性存储了每次实例化时返回的mock对象。 - 所有对实例方法的调用,都需要通过
return_value去访问并断言,而不是直接操作mock类本身。
内容的提问来源于stack exchange,提问作者Horus
相关产品推荐
相关产品推荐

