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

Python继承类super()初始化语句测试覆盖率未覆盖如何解决

解决方案

你遇到的未覆盖问题大概率是直接实例化A时,父类B的构造方法触发了额外依赖逻辑导致报错、提前终止执行,或是之前的patch路径不符合规则没有生效。你可以按照以下步骤修复:

  1. 遵循patch的定位规则:需要patch A类定义所在模块中引用的B的__init__方法,而非全局的B类本身,符合「在哪里使用就在哪里patch」的原则。
  2. 将父类构造方法mock为空实现:避免父类逻辑执行时抛出异常,保证A的__init__中super调用行可以正常执行完成。

示例测试代码

"""Test class for A"""
from datetime import timedelta, datetime
from mock import patch, MagicMock
from unittest import TestCase

# 假设A类定义在my_task模块中,替换为你实际的模块路径
from my_task import A


class JobInfoHandler:
    """Mock job info."""
    def __init__(self):
        self.crawlerConfig = None


class TestA(TestCase):
    """Test class for A."""
    # 替换为A类所在模块中B的引用路径
    @patch('my_task.B.__init__', return_value=None)
    def test_a_init_super_call(self, mock_b_init):
        job_info_ob = JobInfoHandler()
        input_kwargs = {
            'owner': 'arahej', 
            'task_id': '12', 
            'schedule_interval': timedelta(minutes=60), 
            'job_info': job_info_ob
        }
        # 实例化A时super行正常执行
        self.obj_a = A(**input_kwargs)
        # 可选:验证super调用的参数是否符合预期
        mock_b_init.assert_called_once_with(
            execution_timeout=timedelta(minutes=30),
            **input_kwargs
        )

运行上述测试用例后,super(A, self).__init__(...)这行代码就会被正常统计到覆盖率中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:24:03