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

为何我的Python单元测试覆盖率偏低?附代码求优化方案

问题

我编写了一个小型类与函数,并为它们编写了单元测试用例。
代码如下:

from flask_restful import Resource
class Calculator:
    def __init__(self, a, b ):
        self.a = a
        self.b = b

    def add(self):
        return self.a + self.b

class CalcResource(Resource):
    def get(self):
        cal = Calculator(2, 3)
        tr = cal.add()
        return tr

对应的单元测试代码:

class TestCalcResource:
    def test_get(self):
        calc_res = CalcResource()
        res = calc_res.get()
        assert res == 5

运行Python coverage模块后,仅获得65%的测试覆盖率,而要求需达到90%,恳请提供优化建议。已附上覆盖率截图。

优化建议

  • 单独测试Calculator类的所有成员:当前测试仅通过CalcResource.get()间接调用Calculator的方法,未单独覆盖该类的执行路径。补充专属测试用例,覆盖初始化和加法方法的多种场景:
    class TestCalculator:
        def test_init(self):
            calc = Calculator(1, 2)
            assert calc.a == 1
            assert calc.b == 2
    
        def test_add(self):
            # 常规正整数
            calc1 = Calculator(2, 3)
            assert calc1.add() == 5
            # 负数相加
            calc2 = Calculator(-1, -2)
            assert calc2.add() == -3
            # 零值场景
            calc3 = Calculator(0, 0)
            assert calc3.add() == 0
            # 浮点数运算
            calc4 = Calculator(1.5, 2.5)
            assert calc4.add() == 4.0
    
  • 规范测试CalcResource的请求逻辑:当前直接调用get()方法未模拟Flask请求上下文,不符合Flask-RESTful资源的测试标准,改用测试客户端验证完整请求流程:
    from flask import Flask
    from flask_restful import Api
    
    def test_calc_resource_get():
        app = Flask(__name__)
        api = Api(app)
        api.add_resource(CalcResource, '/calc')
        
        with app.test_client() as client:
            response = client.get('/calc')
            assert response.status_code == 200
            assert response.get_json() == 5
    
  • 补充边界场景验证:针对CalcResource.get(),可额外验证返回格式是否为JSON、异常分支(若后续扩展逻辑)等,进一步提升覆盖率与测试健壮性。

完成上述优化后,所有代码路径都会被测试覆盖,覆盖率可轻松达标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:52:39