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
相关产品推荐
相关产品推荐

