1. 安装 PHPUnit
- 使用 Composer 安装 PHPUnit
composer require --dev phpunit/phpunit
- 安装完成后,可以检查 PHPUnit 是否安装成功:
./vendor/bin/phpunit --version
2.配置 PHPUnit
- 在项目根目录创建 phpunit.xml 文件,作为 PHPUnit 的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php" colors="true">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
2.在项目根目录下创建 tests目录(通常与 app 平级),用于存放测试文件。
3. 在 tests目录下创建一个 bootstrap.php 文件,用于初始化测试环境
<?php
// 自动加载文件
require __DIR__ . '/../vendor/autoload.php';
// 初始化 ThinkPHP 应用
$app = new \think\App();
// 设置应用路径(可根据你的项目路径调整)
$app->setAppPath(__DIR__ . '/../app/');
// 初始化应用并加载配置
$app->initialize();
project/
├── app/ # 应用代码
├── config/ # 配置文件
├── tests/ # 测试目录
│ ├── bootstrap.php # 测试初始化文件
│ ├── UserTest.php # 示例测试文件
├── vendor/ # 依赖包
├── composer.json
└── phpunit.xml # PHPUnit 配置文件
4.在unit目录下创建测试文件 (UserTest.php)
<?php
namespace tests;
use app\controller\User;
use PHPUnit\Framework\TestCase;
use think\facade\Request;
class UserTest extends TestCase
{
protected $controller;
protected function setUp(): void
{
parent::setUp();
// 初始化应用
$this->controller = app()->make(User::class);
}
public function testLogin()
{
// 模拟输入数据
$requestData = [
'mobile' => '18682190712',
'password' => '123456'
];
$result = $this->controller->test();
$result = json_decode($result,true);
// 断言结果
// assertTrue 用来断言某个表达式的值是否为 true ,如果为 true 则通过,否则会抛出异常。
// $this->assertTrue($result['code'] ==200);
// assertEquals 用来断言两个值是否相等(弱比较,允许类型不同),如果相等则通过,否则会抛出异常。
$this->assertEquals('success', $result['msg'],'登录错误');
// $this->assertFalse($result['code'] == 100,'验证结果是否为false');
// $this->assertNotEquals(5,4,'验证结果是否不相等');
// $this->assertSame(5,5,'验证结果是否相等(类型也必须相同)');
// $this->assertNotSame(5,4,'验证结果是否不相等(类型也必须不同)');
// $this->assertNull(null,'验证结果是否为空');
// $this->assertNotNull(5,'验证结果是否不为空');
// $this->assertGreaterThan(5,6,'验证结果是否大于');
// $this->assertLessThan(5,4,'验证结果是否小于');
}
}
- 运行测试
# ./vendor/bin/phpunit
如果是多模块测试
以下是示例项目的目录结构:
/project
├── app/
│ ├── api/
│ │ ├── controller/
│ │ │ ├── user/
│ │ │ │ ├── ProfileController.php
│ │ │ │ ├── SettingsController.php
│ │ │ ├── OrderController.php
│ ├── admin/
│ │ ├── controller/
│ │ │ ├── dashboard/
│ │ │ │ ├── OverviewController.php
│ │ │ ├── UserController.php
测试目录
/project
├── tests/
│ ├── unit/
│ │ ├── api/
│ │ │ ├── user/
│ │ │ │ ├── ProfileControllerTest.php
│ │ │ │ ├── SettingsControllerTest.php
│ │ │ ├── OrderControllerTest.php
│ │ ├── admin/
│ │ │ ├── dashboard/
│ │ │ │ ├── OverviewControllerTest.php
│ │ │ ├── UserControllerTest.php
规范1:测试类与控制器文件保持一一对应,名称添加 Test 后缀
规范2:测试目录按照模块(如 api 和 admin)划分子目录
规范3:目录结构清晰、统一,便于快速定位和维护测试代码