用 DeepSeek 写自动化测试时,先把函数的输入、舍入规则和错误条件写清楚。本例用 unittest 检查“数量乘单价”的金额函数,覆盖正常计算、零数量、舍入、负数和错误类型。
准备输入与运行环境
Python 3.11 自带 unittest 和 Decimal,无需安装测试框架。规则是数量为非负整数,单价为有限的非负十进制字符串,结果按四舍五入保留两位小数。该规则用于虚构商品演示,实际财务口径需另外确认。

给 DeepSeek 的任务说明
请为 total(qty, price) 写 unittest。qty 必须是非负整数,拒绝 bool;price 是表示非负有限数的字符串。用 Decimal,ROUND_HALF_UP 保留两位。覆盖 2*12.50、零数量、1*1.005、负数、NaN、Infinity、布尔数量与错误类型。不要把失败测试删掉来获得绿色结果。
在本地运行与检查
将下面代码保存为 example_06.py。进入保存该文件的目录,在终端执行 python example_06.py。代码应由你检查后执行,按实际字段修改。
import unittest
from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
def total(qty, price):
if type(qty) is not int or not isinstance(price, str):
raise TypeError("数量为整数,单价为字符串")
if qty < 0:
raise ValueError("数量不能为负")
try:
value = Decimal(price)
except InvalidOperation as exc:
raise ValueError("单价不是十进制数") from exc
if not value.is_finite() or value < 0:
raise ValueError("单价必须有限且非负")
return (value * qty).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
class TestTotal(unittest.TestCase):
def test_normal(self):
self.assertEqual(total(2, "12.50"), Decimal("25.00"))
def test_zero(self):
self.assertEqual(total(0, "12.50"), Decimal("0.00"))
def test_rounding(self):
self.assertEqual(total(1, "1.005"), Decimal("1.01"))
def test_invalid_value(self):
for qty, price in [(-1, "2"), (1, "-2"), (1, "NaN"), (1, "Infinity"), (1, "abc")]:
with self.subTest(qty=qty, price=price):
with self.assertRaises(ValueError):
total(qty, price)
def test_invalid_type(self):
for qty, price in [(True, "2"), (1.5, "2"), (1, 2.0)]:
with self.subTest(qty=qty, price=price):
with self.assertRaises(TypeError):
total(qty, price)
if __name__ == "__main__":
unittest.main(verbosity=2)
绿色结果应该意味着什么
运行会显示 5 个测试方法;subTest 下的每组异常输入也会执行。正常断言检查数值,异常断言检查拒绝条件。若把函数改成普通浮点乘法,舍入与类型测试可能失败,应先核对契约,不把期望值随意改成实际输出。
把失败交给 DeepSeek 修复
提供失败测试名称、完整异常和函数代码,要求解释违反哪条规则并给最小修正。修正后重跑全部测试,防止修好舍入却放行负值。大金额可能超过 Decimal 当前精度,本例没有定义该范围,实际系统需要添加金额上限与精度规则。
怎样确认结果正确
终端应显示 Ran 5 tests 和 OK,且退出码为 0。把舍入方式改为 ROUND_DOWN 后,test_rounding 应失败;修复后再运行恢复为 OK。已有系统还应测试真实调用链和持久化,不能把这组函数测试当成系统验收。
适用边界与常见问题
函数和价格都是人为编写的教学示例,没有真实订单或支付操作。单元测试只能覆盖已写出的契约与输入,无法证明所有业务场景正确;税费、折扣、币种和大型金额范围不在本例内。
资料依据
接口说明核验日期:2026 年 10 月 1 日。Python unittest;Python Decimal。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30219.html