单元测试与文档同步生成(使用千问)

【图书介绍】《千问高效办公的方法和技巧》-CSDN博客

单元测试是"代码的体检",针对单个函数/组件,测试正常、异常、边界等场景,确保代码按预期运行,避免上线后出隐藏bug,是保障代码质量的关键;传统开发中,单元测试编写耗时且易遗漏场景,导致代码上线后出现隐藏bug。文档同步是"代码的说明书",告诉别人"这个代码做什么、怎么用、参数是什么",避免后续维护或使用时猜来猜去。千问可基于业务代码自动生成单元测试(如JUnit、pytest),覆盖正常场景、异常场景、边界场景,同时确保单元测试与代码文档同步更新,提升代码可靠性与可维护性。

示例:生成单元测试和文档

某公司后端团队要求所有新代码必须包含单元测试和文档。开发人员小郑刚写完一个计算折扣价格的函数calculate_discounted_price(original_price, discount_percent),但他不确定如何设计全面的测试用例(比如负数、超过100%的折扣)。他希望AI能帮他自动生成测试文件和标准文档,确保符合团队规范。

提示词如下:

你是一名质量保障工程师,请为以下函数生成单元测试和文档:

【编程语言】Python

【函数代码】

def calculate_discounted_price(original_price, discount_percent):

if original_price < 0:

raise ValueError("价格不能为负")

if not (0 <= discount_percent <= 100):

raise ValueError("折扣必须在0-100之间")

return original_price * (1 - discount_percent / 100)

【测试框架】pytest

【输出要求】

  1. 为函数添加符合Google Style的docstring。

  2. 生成pytest测试文件,包含3类用例:正常输入、边界值(0%, 100%)、异常输入(负价格、150%折扣)。

  3. 每个测试用例有明确断言和注释。

输出结果如下:

"""

该文件包含calculate_discounted_price函数的实现、文档和单元测试。

"""

def calculate_discounted_price(original_price, discount_percent):

"""

计算折扣后的价格。

该函数接收原始价格和折扣百分比,返回折扣后的价格。

验证输入参数的有效性,确保价格非负且折扣在0-100之间。

Args:

original_price (float): 原始价格,必须为非负数。

discount_percent (float): 折扣百分比,必须在0到100之间(包含边界值)。

Returns:

float: 折扣后的价格。

Raises:

ValueError: 当original_price为负数或discount_percent不在0-100范围内时抛出。

"""

if original_price < 0:

raise ValueError("价格不能为负")

if not (0 <= discount_percent <= 100):

raise ValueError("折扣必须在0-100之间")

return original_price * (1 - discount_percent / 100)

以下是单元测试部分

import pytest

def test_calculate_discounted_price_normal_cases():

"""

测试正常输入情况下的函数表现。

"""

测试50%折扣的情况

assert calculate_discounted_price(100, 50) == 50.0

测试25%折扣的情况

assert calculate_discounted_price(200, 25) == 150.0

测试10%折扣的情况

assert calculate_discounted_price(1000, 10) == 900.0

测试0.1%折扣的边界情况

assert abs(calculate_discounted_price(100, 0.1) - 99.9) < 0.001

测试99.9%折扣的边界情况

assert abs(calculate_discounted_price(100, 99.9) - 0.1) < 0.001

def test_calculate_discounted_price_boundary_cases():

"""

测试边界值输入情况下的函数表现。

"""

测试0%折扣(无折扣)的情况

assert calculate_discounted_price(100, 0) == 100.0

测试100%折扣(免费)的情况

assert calculate_discounted_price(100, 100) == 0.0

测试价格为0的情况

assert calculate_discounted_price(0, 50) == 0.0

def test_calculate_discounted_price_invalid_price():

"""

测试负价格输入时抛出ValueError异常。

"""

with pytest.raises(ValueError, match="价格不能为负"):

calculate_discounted_price(-10, 50)

with pytest.raises(ValueError, match="价格不能为负"):

calculate_discounted_price(-0.01, 25)

def test_calculate_discounted_price_invalid_discount():

"""

测试超出范围的折扣输入时抛出ValueError异常。

"""

测试超过100%的折扣

with pytest.raises(ValueError, match="折扣必须在0-100之间"):

calculate_discounted_price(100, 150)

测试负折扣

with pytest.raises(ValueError, match="折扣必须在0-100之间"):

calculate_discounted_price(100, -10)

测试超过100%的边界情况

with pytest.raises(ValueError, match="折扣必须在0-100之间"):

calculate_discounted_price(100, 101)

if name == "main":

运行单元测试

pytest.main([file])

相关推荐
zzwq.1 小时前
时间序列处理:日期解析与重采样
python·数据分析
chatexcel2 小时前
ChatExcel AI工具测试报告:从 AI Excel、数据分析到 AI PPT 的完整闭环
人工智能·数据分析·excel
YangYang9YangYan2 小时前
经济专业想升职加薪学数据分析的价值分析
数据挖掘·数据分析
饺子大魔王的男人3 小时前
不想再给云存储交月费?Go2RTC + EasyNVR 让摄像头录像留在本地不花钱
后端·数据分析
2401_827499993 小时前
python项目实战12-数据分析
大数据·数据挖掘·数据分析
IpdataCloud14 小时前
大数据分析:如何高效查询海量IP归属地?
tcp/ip·数据挖掘·数据分析·ip
babe小鑫19 小时前
计算机专业转行数据分析可行吗?学数据分析有用吗
数据挖掘·数据分析
SelectDB技术团队19 小时前
基于 SelectDB 实现 Hive 数据湖统一分析:洋钱罐全球一体化探索分析平台升级实践
数据仓库·数据分析·apache doris·selectdb
Highcharts.js19 小时前
用 Highcharts 为日历赋予数据分析能力:Bryntum Calendar 的实践
数据挖掘·数据分析