为何我的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
相关产品推荐
相关产品推荐

