Python 单元测试入门:用 unittest 检查购物清单总价

举报
yd_263910519 发表于 2026/11/08 13:34:46 2026/11/08
【摘要】 用购物清单总价函数演示 unittest 的普通输入、空列表和异常测试,了解运行结果与测试边界。

写完一个函数后,手动试一次只能说明这次输入看起来正常。下次修改代码时,原来的行为是否还在?Python 自带的 unittest 可以把预期写成可重复运行的检查,不需要额外安装测试库。

从一个小需求开始

假设需要计算购物清单总价:输入是一组非负数字,空清单的总价是零;如果有负数,就提示输入无效。新建文件 test_total.py,写入:

import unittest

def total(prices):
    if any(price < 0 for price in prices):
        raise ValueError("价格不能为负")
    return sum(prices)

class TotalTests(unittest.TestCase):
    def test_normal(self):
        self.assertEqual(total([3, 5, 2]), 10)

    def test_empty(self):
        self.assertEqual(total([]), 0)

    def test_negative(self):
        with self.assertRaises(ValueError):
            total([3, -1])

if __name__ == "__main__":
    unittest.main()

这里约定 prices 使用列表,示例只演示整数金额;真实金额计算还要明确精度、类型和舍入规则。三个测试分别覆盖普通输入、空列表和非法值。把一个场景写成一个方法,失败时更容易定位问题。

运行并理解结果

在文件所在目录执行:

python -m unittest -v test_total

如果系统使用 python3 命令,可以将上面的 python 改成 python3。参数 -v 会显示每个测试的名称;全部通过时,末尾显示 OK 和运行数量。测试类继承 unittest.TestCase,方法名以 test 开头,测试运行器才能按约定识别它们。

assertEqual 比较实际值与期望值;assertRaises 检查代码是否抛出指定类型的异常。如果得到错误结果,框架会报告失败位置和实际值;如果程序发生未预期的异常,则会报告错误及堆栈。

试着制造一次失败

将普通测试的期望值暂时改成 11,重新运行。输出会显示 10 与 11 不相等,并指出失败的测试方法。观察后把期望值改回 10,再确认通过。刻意体验一次失败,有助于分辨“没有运行测试”和“测试发现问题”。

测试通过只证明所列场景满足了断言,不能保证程序在所有输入下都正确。实际开发中,可以继续补充小数、非数字输入或更多业务边界,并先明确每种情况应当如何处理。修改代码后重复运行,让测试成为日常反馈的一部分。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。