跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 测试驱动开发
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python测试驱动开发(TDD) = '''测试驱动开发'''(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际功能代码之前先编写测试用例。TDD的核心思想是通过测试来驱动代码的设计与实现,从而提高代码质量、减少缺陷并增强可维护性。Python因其简洁的语法和丰富的测试框架(如`unittest`、`pytest`)非常适合TDD实践。 == 核心概念 == TDD遵循一个简单的循环流程,称为“红-绿-重构”: # '''红''':编写一个失败的测试用例(测试尚未实现的功能)。 # '''绿''':编写最简代码使测试通过。 # '''重构''':优化代码结构,同时保持测试通过。 <mermaid> graph LR A[编写测试] --> B[运行测试失败] B --> C[编写最小实现] C --> D[运行测试通过] D --> E[重构代码] E --> A </mermaid> == 为什么使用TDD? == * '''提高代码质量''':测试覆盖率更高,缺陷更早暴露。 * '''清晰的设计''':通过测试定义接口,避免过度设计。 * '''快速反馈''':即时验证功能是否按预期工作。 * '''文档作用''':测试用例本身就是功能的使用示例。 == 实践步骤 == === 1. 编写测试用例 === 使用Python的`unittest`模块(或其他框架如`pytest`)定义测试。例如,测试一个简单的加法函数: <syntaxhighlight lang="python"> import unittest class TestAddition(unittest.TestCase): def test_add_numbers(self): self.assertEqual(add(2, 3), 5) # 假设add函数尚未实现 if __name__ == '__main__': unittest.main() </syntaxhighlight> 运行后会失败(红),因为`add`函数不存在。 === 2. 实现功能 === 编写最简代码使测试通过: <syntaxhighlight lang="python"> def add(a, b): return a + b </syntaxhighlight> 重新运行测试,此时应通过(绿)。 === 3. 重构 === 优化代码逻辑或结构,例如扩展为支持多个数字相加: <syntaxhighlight lang="python"> def add(*args): return sum(args) # 更新测试用例 class TestAddition(unittest.TestCase): def test_add_numbers(self): self.assertEqual(add(2, 3), 5) self.assertEqual(add(1, 2, 3), 6) </syntaxhighlight> == 实际案例:开发一个购物车 == 假设需要实现一个购物车的`add_item`方法: === 测试代码 === <syntaxhighlight lang="python"> class TestShoppingCart(unittest.TestCase): def test_add_item(self): cart = ShoppingCart() cart.add_item("apple", 1) self.assertEqual(cart.items, {"apple": 1}) </syntaxhighlight> === 实现代码 === <syntaxhighlight lang="python"> class ShoppingCart: def __init__(self): self.items = {} def add_item(self, item, quantity): self.items[item] = quantity </syntaxhighlight> === 扩展功能(如重复添加) === 更新测试后重构代码: <syntaxhighlight lang="python"> def test_add_existing_item(self): cart = ShoppingCart() cart.add_item("apple", 1) cart.add_item("apple", 2) self.assertEqual(cart.items, {"apple": 3}) # 修改实现 def add_item(self, item, quantity): self.items[item] = self.items.get(item, 0) + quantity </syntaxhighlight> == 高级技巧 == * '''Mock对象''':模拟外部依赖(如数据库、API)以隔离测试。 * '''参数化测试''':使用`@pytest.mark.parametrize`测试多组输入。 * '''覆盖率工具''':如`coverage.py`确保测试覆盖所有分支。 == 常见问题 == * '''测试过于琐碎''':避免测试语言内置功能(如列表的`append`方法)。 * '''忽略重构阶段''':重构是TDD的重要组成部分,不可省略。 * '''测试速度慢''':将单元测试与集成测试分离,使用Mock加速。 == 数学基础 == TDD的可靠性可通过测试覆盖率衡量。若代码有<math>n</math>个分支,测试需覆盖所有路径,其组合数为<math>2^n</math>(最坏情况)。实践中通过等价类划分减少用例数。 == 总结 == TDD是一种以测试为核心的开发方法,适合Python项目从小型脚本到大型系统的开发。通过“红-绿-重构”循环,开发者能更自信地交付高质量代码。初学者可从简单函数开始练习,逐步掌握Mock和高级测试模式。 [[Category:编程语言]] [[Category:Python]] [[Category:Python 测试与调试]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)