单元测试是"代码的体检",针对单个函数/组件,测试正常、异常、边界等场景,确保代码按预期运行,避免上线后出隐藏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
【输出要求】
-
为函数添加符合Google Style的docstring。
-
生成pytest测试文件,包含3类用例:正常输入、边界值(0%, 100%)、异常输入(负价格、150%折扣)。
-
每个测试用例有明确断言和注释。
输出结果如下:
"""
该文件包含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])

