PyCharm 2025.2 Help

测试您的第一个 Python 应用程序

请记住,在第一个教程中,您 创建了第一个 Python 应用程序 ,而在第二个教程中,您 调试了它。 现在是时候进行一些测试了。

选择测试运行器

PyCharm 会自动检测 安装在您的 Python 解释器上的测试运行器,并使用它来运行测试。 如果未安装特定的测试运行器,PyCharm 将使用 unittest

要在项目设置中显式设置所需的测试运行器,请按 Ctrl+Alt+S 打开设置并选择 工具 | Python 集成工具 ,然后从 默认测试运行器 列表中选择目标测试运行器。

选择一个测试运行器

欲了解更多信息,请参阅 测试框架

创建测试

创建测试的一种快速方法是让 PyCharm 从我们想要测试的类中生成它们的存根。 为此,我们需要打开 car.py ,然后右键点击类的名称,指向 转到 ,然后选择 测试 (或者直接按 Ctrl+Shift+T):

前往测试

会弹出一个建议创建新测试的窗口:

创建一个新测试

好的,让我们开始吧。 我们将测试我们的汽车是否能够加速和刹车,因此让我们选择这些复选框:

创建测试对话框

一个新的 Python 测试类已创建:

测试类

您可以通过点击类定义旁边的 运行图标 图标来运行测试。 一个 运行/调试配置将自动创建:

从上下文菜单运行测试

然而,我们可以看到测试默认情况下失败了:

失败的测试

现在我们知道可以运行测试了,让我们开始编写一些实际的测试代码。

编写测试

如何编写单元测试不在本文的范围内。 如果您有兴趣了解如何使用 `unittest` 框架,您可以 查看他们的文档

对于我们的示例,让我们使用这些测试:

from unittest import TestCase from car import Car class TestCar(TestCase): def setUp(self): self.car = Car() class TestInit(TestCar): def test_initial_speed(self): self.assertEqual(self.car.speed, 0) def test_initial_odometer(self): self.assertEqual(self.car.odometer, 0) def test_initial_time(self): self.assertEqual(self.car.time, 0) def test_initial_average_speed(self): self.assertEqual(self.car.average_speed(), 0) class TestAccelerate(TestCar): def test_accelerate_from_zero(self): self.car.accelerate() self.assertEqual(self.car.speed, 5) def test_multiple_accelerates(self): for _ in range(3): self.car.accelerate() self.assertEqual(self.car.speed, 15) class TestBrake(TestCar): def test_brake_once(self): self.car.accelerate() self.car.brake() self.assertEqual(self.car.speed, 0) def test_multiple_brakes(self): for _ in range(5): self.car.accelerate() for _ in range(3): self.car.brake() self.assertEqual(self.car.speed, 10) def test_should_not_allow_negative_speed(self): self.car.brake() self.assertEqual(self.car.speed, 0) def test_multiple_brakes_at_zero(self): for _ in range(3): self.car.brake() self.assertEqual(self.car.speed, 0)

运行测试

现在让我们运行测试。 右键点击 test_сar.py 编辑器选项卡,然后选择 运行 'Python tests in test_car.py'

运行文件中的单元测试

这次几乎所有测试都成功通过了:

运行 unittest

调试测试

让我们更仔细地查看测试代码并调试失败的测试。 在 运行 工具窗口的左侧窗格中选择失败的测试,然后在右侧窗格中找到发生错误的行号:

在运行工具窗口中选择失败的测试

点击编辑器中的行号以设置断点:

测试断点

接下来,启动调试器会话。 为此,请右键点击方法 test_initial_average_speed 的编辑器背景,然后从上下文菜单中选择 调试

调试

调试 工具窗口打开:

调试输出

点击 逐步进入 按钮进入类 Car ,然后在 调试 工具窗口中展开 self 节点。

调试器已高亮显示将要执行的下一行(return self.odometer / self.time ),并且在 调试 工具窗口中我们可以看到 self.speed 等于 0:

异常前的状态

这将在下一步导致异常,因为零除法是不可能的。 让我们通过向类 Car 添加一些代码来修复它。

  1. 在编辑器中选择 self.odometer / self.time

  2. 从主菜单或上下文菜单中选择 重构 | 引入变量 ,或者按 Ctrl+Alt+V

  3. 输入变量的名称,例如 avg_speed

    引入变量
  4. 选择语句 avg_speed = self.odometer / self.time ,按 Ctrl+Alt+T代码 | 用...包围 ),然后选择 如果 为语句添加条件。

    PyCharm 创建了一个存根 if 构造:

    添加一个存根 if 构造
  5. 如果 self.time 等于 0,我们不应该进行除法。 因此,输入 self.time != 0 以指定条件。

    然后指定当 self.time 为零时, avg_speed 应等于零。 您应该得到以下内容:

    def average_speed(self): if self.time != 0: avg_speed = self.odometer / self.time else: avg_speed = 0 return avg_speed

切换到 test_car.py 运行测试:

通过测试

所有测试都已通过。

自动运行测试

在最后一段中,我们在修复 Car 类后手动重新运行了测试。 如果您希望专注于代码,并只在解决问题时看到结果,PyCharm 可以为您自动运行测试。

点击工具栏上的 更多 并选择 自动重新运行

启用自动测试

点击 自动运行测试 按钮,位于 运行工具栏上。

现在,每次您在项目文件中进行更改(如 之前所做的那样),测试将自动运行,无需您的干预。

最后修改日期: 2025年 9月 26日