编写测试
在本节中,我们将简要概述如何使用 Pest 编写测试。成功安装 Pest后,您将在项目中找到以下文件和文件夹
1├── 📂 tests2│ ├── 📂 Unit3│ │ └── ExampleTest.php4│ └── 📂 Feature5│ │ └── ExampleTest.php6│ └── TestCase.php7│ └── Pest.php8├── phpunit.xml
tests
文件夹作为所有测试文件所在的根目录。在此文件夹中,您将找到两个子文件夹 Unit
和 Feature
,它们分别包含单元测试和功能测试。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 的更多信息:断言 →