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

Python mock返回无效值:SitemapParser模拟方法返回MagicMock而非预期列表

问题原因

核心问题是你设置mock返回值的对象错误:

  • 你通过@patch注入的mock_sitemap_parser是对SitemapParser类本身的模拟
  • 业务代码中会先调用SitemapParser()生成类实例,再调用实例的parse_sitemap方法,这个实例对应的是mock_sitemap_parser.return_value
  • 你之前把返回值设置给了类的parse_sitemap方法,而非实例的parse_sitemap方法,因此业务代码中实际调用的实例方法没有绑定你预设的返回值,最终返回默认的MagicMock对象。你日志中输出的结果对象名称SitemapParser().parse_sitemap()也印证了这一点,名称里的SitemapParser()就代表实际调用的是实例的方法。
修复方案

仅需要修改测试代码中设置返回值的行,给mock_sitemap_parser加一层.return_value指向实例即可:

class SourcesParserTest(TestCase):

    @patch('sources.parser.sources_parser.SitemapParser')
    def test_normal_parse(self, mock_sitemap_parser):
        # 新增.return_value指向SitemapParser()生成的实例
        mock_sitemap_parser.return_value.parse_sitemap.return_value = [
            'https://localhost/news/1',
            'https://localhost/news/2',
            'https://localhost/news/3',
        ]

        parser = SourcesParser()
        parser.parse()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:18:02