PestPHP - 一款基于 PHPUnit 的优雅测试框架
PestPHP 是一个优雅的 PHP 测试框架。它专注于简单性,精致的设计以使 PHP 测试变得有趣。
测试 PHP 代码时,你可以接触一系列框架。尽管如此,我们相信 Pest 是世界上最优雅、最复杂的测试框架。它旨在使测试过程变得愉快,它的目标是使测试易于阅读和理解,代码语法与自然人类语言非常相似。
function sum($a, $b) {
return $a + $b;
}
test('sum', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
受 Ruby 的 Rspec 和 Jest 的启发,Pest 易于使用的 API 为你带来了流畅高效的编码体验。此外,测试报告组织良好、实用且信息丰富,具有清晰简洁的错误和堆栈跟踪显示,可用于快速调试。使用 Pest,你可以直接从控制台获得无与伦比的测试报告!
除了出色的测试报告外,Pest 还提供了一系列其他有价值的功能,包括:
- 内置并行功能(parallel feature),可实现更快的测试运行
- 优美的文档,且易于导航
- 用于优化慢速运行测试的本机评测工具
- 开箱即用的架构测试以测试应用程序规则
- 直接在终端上报告覆盖率,以跟踪代码覆盖率
- 多款可选插件,如观察模式和快照测试,可定制 Pest 以满足您的需求
无论你是从事小型个人项目还是大型企业应用程序,Pest 都能提供服务。因此,如果你想让测试过程变得愉快和高效,可以试试 Pest。我们相信你会和喜欢它的。
安装
要求: PHP 8.1+
1. 通过下面命令引入到项目中:
composer require pestphp/pest --dev --with-all-dependencies
2. 在 PHP 项目中初始化 Pest。这一步会在你测试套件的根目录下创建一个名为 Pest.php
的配置文件,你可以在该文件中调整测试套件配置。
./vendor/bin/pest --init
3. 你可以通过下面 pest 命令运行测试。
./vendor/bin/pest
编写测试
成功安装完 Pest 后,你将会看到项目中由如下文件和目录:
├── 📂 tests
│ ├── 📂 Unit
│ │ └── ExampleTest.php
│ └── 📂 Feature
│ │ └── ExampleTest.php
│ └── TestCase.php
│ └── Pest.php
├── phpunit.xml
tests 目录测试主目录,所有测试文件都放在此处。该目录中有两个子目录 - Unit 和 Feature,分别对应于单元测试和特性测试。TestCase.php
文件中,你可以定义所有测试都可以使用的通用功能或者设置。最后,Pest.php 文件是测试套件的配置文件。
此外,你项目的根目录中有一个 phpunit.xml
,该文件用于在运行测试时配置 phpunit 的各种选项。需要注意的是,Pest 是建立在 PHPUnit 之上的,这意味着 PHPUnit 提供的所有选项也可以在 Pest 中使用。因此,您对 phpunit.xml 文件所做的任何自定义或配置也将应用于 Pest测试。
当您开始为项目编写测试时,重要的是要考虑如何有效地创建和组织测试文件。通常,测试文件使用 Test.php
作为后缀,例如 ExampleTest.php
第一个测试
test('sum', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
编写完测试代码后,是时候使用 Pest 运行测试了。当您执行 ./vendor/bin/pest
命令时,pest 将显示一条消息,指示你的测试是通过还是失败。
作为 test()
函数的替代方案,Pest 提供了方便的 it()
函数,该函数只需在测试描述前加上 “it” 一词,即可使测试更具可读性。
it('performs sums', function () {
$result = sum(1, 2);
expect($result)->toBe(3);
});
本例中,当你运行 ./vendor/bin/pest
命令时,输出的内容中会包含描述" it performs sums",连同测试结果。
期望API
正如你可能在前面的示例中注意到的那样,我们使用Pest的期望API在测试代码中执行断言。expect()
函数是 expect API 的核心部分,用于断言满足某些条件。
例如,在我们前面的例子中,我们使用 expect($result)->toBe(3)
来确保 $result
的值等于3。Pest 的期望 API 提供了各种其他断言函数,你可以使用这些函数来测试代码的行为,例如 toBeTrue()
、toBeFalse()
和 toContain()
。
通过使用期望API,你可以编写简洁易读的断言,明确代码正在做什么以及它应该如何表现。
Assertion API
虽然 Pest 的期望 API 提供了一种方便的方式来执行断言,但它并不是唯一可用的选项。你还可以使用 PHPUnit 的断言 API,如果你已经熟悉 PHPUnit 的声明 API,或者您需要执行 Pest 的期望 API 中没有的更复杂的断言,那么它可能会很有用。
test('sum', function () {
$result = sum(1, 2);
$this->assertSame(3, $result); // Same as expect($result)->toBe(3)
});
你可以在 PHPUnit 网站的文档中查看 PHPUnit 的断言 API 的完整列表: docs.phpunit.de/en/10.0/assertions.html