thinkphp unit单元测试

1. 安装 PHPUnit

  1. 使用 Composer 安装 PHPUnit
composer require --dev phpunit/phpunit
  1. 安装完成后,可以检查 PHPUnit 是否安装成功:
./vendor/bin/phpunit --version

2.配置 PHPUnit

  1. 在项目根目录创建 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,'验证结果是否小于');
    }
}

  1. 运行测试
	 # ./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:目录结构清晰、统一,便于快速定位和维护测试代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值