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