Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain

10. Python 测试与调试

单元测试与 pytest

在软件开发中,测试是确保代码质量和功能正确性的关键步骤。Python 提供了多种测试工具和框架,其中最常用的是 unittest 和 pytest。本节将重点介绍如何使用 pytest 进行单元测试。

1. 什么是单元测试?

单元测试是指对软件中的最小可测试单元进行检查和验证。在 Python 中,单元通常是指函数或方法。单元测试的目的是确保每个单元都能按照预期工作,从而在代码修改时快速发现潜在的问题。

2. 为什么选择 pytest?

pytest 是 Python 中最流行的测试框架之一,具有以下优势:

  • 简洁的语法:pytest 的测试代码通常比 unittest 更简洁易读。
  • 丰富的插件生态系统:pytest 支持大量插件,可以扩展其功能,如测试覆盖率、并行测试等。
  • 强大的断言机制:pytest 提供了丰富的断言方法,能够更直观地表达测试条件。
  • 自动发现测试:pytest 能够自动发现并运行项目中的测试文件,无需手动配置。
3. 安装 pytest

在开始使用 pytest 之前,需要先安装它。可以通过以下命令安装:

pip install pytest
4. 编写第一个 pytest 测试

假设我们有一个简单的函数 add,用于计算两个数的和:

# my_module.py
def add(a, b):
    return a + b

我们可以为这个函数编写一个简单的测试:

# test_my_module.py
from my_module import add

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0
    assert add(0, 0) == 0

在这个测试中,我们使用 assert 语句来验证 add 函数的输出是否符合预期。

5. 运行 pytest 测试

在终端中,进入包含测试文件的目录,然后运行以下命令:

pytest

pytest 会自动发现并运行所有以 test_ 开头的测试文件,并输出测试结果。如果所有测试都通过,你会看到类似以下的输出:

============================= test session starts =============================
collected 1 item

test_my_module.py .                                                      [100%]

============================== 1 passed in 0.01s ==============================
6. 使用 pytest 的高级功能

pytest 提供了许多高级功能,可以帮助你编写更复杂的测试:

  • 参数化测试:使用 @pytest.mark.parametrize 装饰器,可以为同一个测试函数提供多组输入数据。
  • 夹具(Fixtures):夹具是一种用于在测试之间共享资源的机制。你可以使用 @pytest.fixture 装饰器定义夹具,并在测试函数中使用它们。
  • 异常测试:你可以使用 pytest.raises 来测试函数是否抛出了预期的异常。
7. 示例:参数化测试
import pytest
from my_module import add

@pytest.mark.parametrize("a, b, expected", [
    (2, 3, 5),
    (-1, 1, 0),
    (0, 0, 0),
])
def test_add(a, b, expected):
    assert add(a, b) == expected
8. 示例:使用夹具
import pytest

@pytest.fixture
def sample_data():
    return [1, 2, 3, 4, 5]

def test_sum(sample_data):
    assert sum(sample_data) == 15
9. 示例:异常测试
import pytest

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为零")
    return a / b

def test_divide_by_zero():
    with pytest.raises(ValueError):
        divide(10, 0)
10. 总结

pytest 是一个功能强大且易于使用的测试框架,能够帮助你编写高效、可靠的单元测试。通过掌握 pytest 的基本用法和高级功能,你可以显著提高代码的质量和可维护性。在后续章节中,我们将继续探讨其他测试和调试工具,帮助你构建更加健壮的 Python 应用程序。

Last Updated:: 3/17/25, 7:20 PM