汪同学胡咧咧头像

Python 单元测试实战:pytest 让测试比 print 调试快十倍

你改了一行 calc_price 的折扣逻辑,本地跑了一下觉得没问题,提交、合并、上线。三天后客服反馈"VIP 下单金额算错了"。你翻回代码才想起,那天只手测了普通用户,VIP 的 0.95 倍率分支根本没碰过。这种事我经历过不止一次,后来把 pytest 塞进每个项目的提交前检查,类似的低级回归再没漏到线上。

本文基于 Python 3.9+、pytest 8.x(2026 年稳定主线,支持 3.9+)写成,所有示例都能直接跑。读完你能搭出一个"改完代码 pytest 一回车,红绿一目了然"的最小测试工程,并且知道 fixture、参数化、mock、覆盖率这几个最常被用错的点到底怎么落地。

一、为什么是 pytest,不是 unittest

unittest 要写类、写 self.assert*、写 setUp/tearDown,样板代码多。pytest 直接用普通 assert,测试文件按文件名自动发现,零继承、零样板:

# test_sample.py
def inc(x):
    return x + 1

def test_answer():
    assert inc(3) == 4

跑 pytest 就能看到哪个用例红、哪行断言失败、实际值和期望值差在哪。pytest 还兼容 unittest.TestCase,老项目不用推倒重来。

二、最小可跑示例:先有一个被测函数

建一个真能测的函数,后面所有测试都围着它转:

# src/shop/price.py
def calc_price(origin: float, discount: float, vip: bool = False) -> float:
    """计算实付价:原价 * (1-折扣),VIP 再打 95 折。"""
    if origin < 0:
        raise ValueError("origin must be >= 0")
    if not 0 <= discount <= 1:
        raise ValueError("discount must be in [0, 1]")
    price = origin * (1 - discount)
    if vip:
        price *= 

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/videwhy/article/details/170537586

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--