编写测试

在本节中,我们将简要概述如何使用 Pest 编写测试。成功安装 Pest后,您将在项目中找到以下文件和文件夹

1├── 📂 tests
2│ ├── 📂 Unit
3│ │ └── ExampleTest.php
4│ └── 📂 Feature
5│ │ └── ExampleTest.php
6│ └── TestCase.php
7│ └── Pest.php
8├── phpunit.xml

tests 文件夹作为所有测试文件所在的根目录。在此文件夹中,您将找到两个子文件夹 UnitFeature,它们分别包含单元测试和功能测试。TestCase.php 文件用于定义您希望在所有测试中使用的公共功能或设置。最后,Pest.php 文件用于配置您的测试套件

此外,在项目的根目录中还可以找到一个 phpunit.xml 文件,用于在运行测试时配置 PHPUnit 的各种选项。需要注意的是,Pest 是建立在 PHPUnit 之上的,这意味着 PHPUnit 提供的所有选项也都可以用于 Pest。因此,您使用 phpunit.xml 文件进行的任何自定义或配置也将应用于 Pest 测试。

在开始为项目编写测试时,务必考虑如何有效地创建和组织测试文件。通常,测试文件以 Test.php 为后缀,例如 ExampleTest.php

您的第一个测试

对于我们的第一个测试,让我们编写一些简单的内容。假设您的项目有一个名为 sum 的全局函数,用于将两个数字加在一起。要测试此函数,您将创建一个 Tests\Unit\SumTest.php 文件,其中包含以下代码。

1test('sum', function () {
2 $result = sum(1, 2);
3 
4 expect($result)->toBe(3);
5});

编写完测试代码后,就可以使用 Pest 运行测试了。当您执行 ./vendor/bin/pest 命令时,Pest 将显示一条消息,指示您的测试是通过还是失败。

作为 test() 函数的替代方案,Pest 提供了方便的 it() 函数,它只是在测试描述前加上“it”字样,使您的测试更具可读性。

1it('performs sums', function () {
2 $result = sum(1, 2);
3 
4 expect($result)->toBe(3);
5});

在这种情况下,当您运行 ./vendor/bin/pest 命令时,输出将包含描述“it performs sums”,以及测试结果。

最后,您还可以使用 describe() 函数将相关的测试分组在一起。例如,您可以使用 describe() 函数将所有与 sum() 函数相关的测试分组在一起。

1describe('sum', function () {
2 it('may sum integers', function () {
3 $result = sum(1, 2);
4 
5 expect($result)->toBe(3);
6 });
7 
8 it('may sum floats', function () {
9 $result = sum(1.5, 2.5);
10 
11 expect($result)->toBe(4.0);
12 });
13});

当您运行 ./vendor/bin/pest 命令时,输出将包含描述“sum performs sums”,以及测试结果。

断言 API

您可能已经在之前的示例中注意到,我们使用了 Pest 的断言 API 在测试代码中执行断言。expect() 函数是断言 API 的核心部分,用于断言某些条件是否满足。

例如,在我们之前的示例中,我们使用 expect($result)->toBe(3) 来确保 $result 的值等于 3。Pest 的断言 API 提供了各种其他断言函数,您可以使用它们来测试代码的行为,例如 toBeTrue()toBeFalse()toContain()

通过使用断言 API,您可以编写简洁易懂的断言,使代码的功能和行为一目了然。在下一节中,我们将介绍 Pest 断言 API 中一些最常用的断言函数。

断言 API

虽然 Pest 的断言 API 提供了一种方便的方式来执行断言,但这并不是唯一可用的选项。您还可以使用 PHPUnit 的断言 API,如果您已经熟悉 PHPUnit 的断言 API 或需要执行 Pest 断言 API 中不可用的更复杂的断言,这将非常有用。

1test('sum', function () {
2 $result = sum(1, 2);
3 
4 $this->assertSame(3, $result); // Same as expect($result)->toBe(3)
5});

您可以在 PHPUnit 网站上找到 PHPUnit 断言 API 的完整文档:docs.phpunit.de/en/11.3/assertions.html


继续我们的下一节,以获取有关如何使用断言 API 的更多信息:断言 →