HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/fbxin.xxlht.com/thinkphp/tests/README.md
## 测试目录结构

测试文件主要在 tests 文件下面,主要有以下几个文件夹

- conf 测试环境配置文件。
- script 测试环境配置脚本。
- thinkphp 测试用例和相关文件,与项目文件夹结构一致。
- mock.php 测试入口文件。

## 主要测试流程

thinkphp5 的测试的主要流程是跟 thinkphp 的系统流程是相似的,大体的流程为:

1. 引用 mock.php 文件加载框架

2. 根据文件目录,添加测试文件

3. 执行单元测试,输出结果

## 测试举例

例如测试 thinkphp 里的 apc 缓存,将分为以下几个过程:

1. 创建 apcTest.php 文件

该文件应与 apc.php 目录路径 `thinkphp/library/think/cache/driver` 一致,命名空间与目录所在一致,并引用 `PHPUnit_Framework_TestCase`。

  ```php
  <?php

  namespace tests\thinkphp\library\think\cache\driver;

  class apcTest extends \PHPUnit_Framework_TestCase
  {
      //设定基境
      public function setUp()
      {
      }
  }
  ```

2. 编写测试文件

  - 引用 app、config 和 cache

  ```php
  use think\app;
  use think\cache;
  use think\config;
  ```
  - 在 setUp 函数中设定 require 条件

  ```php
  if(!extension_loaded('apc')){
      $this->markTestSkipped('apc扩展不可用!');
  };
  ```

  - 编写测试用例

  *具体写法参照 [PHPUnit 官方文档](https://phpunit.de/manual/4.8/zh_cn/index.html)*

  ```php
  public function testGet()
  {
      App::run();
      $this->assertInstanceOf(
          '\think\cache\driver\Apc',
          Cache::connect(['type' => 'apc', 'expire' => 1])
      );
      $this->assertTrue(Cache::set('key', 'value'));
      $this->assertEquals('value', Cache::get('key'));
      $this->assertTrue(Cache::rm('key'));
      $this->assertFalse(Cache::get('key'));
      $this->assertTrue(Cache::clear('key'));
      Config::reset();
  }
  ```

3. 执行单元测试命令

  在项目根目录执行

  ```bash
  $ phpunit
  ```

  若想看到所有结果,请添加-v参数

  ```bash
  $ phpunit -v
  ```

4. 输出结果

## 相关文档

[各个部分单元测试说明](http://www.kancloud.cn/brother_simon/tp5_test/96971 "各部分单元测试说明")

## 大家一起来

单元测试的内容会跟框架同步,测试内容方方面面,是一个相对复杂的模块,同时也是一个值得重视的部分。希望大家能够多多提出意见,多多参与。如果你有任何问题或想法,可以随时提 issue,我们期待着收到听大家的质疑和讨论。

## 任务进度

单元测试任务进度,请大家认领模块

|模块|认领人|进度|
|---|---|---|
|Base|||
|App|Haotong Lin|√|
|Build|刘志淳||
|Config|Haotong Lin|√|
|Cache|||
|Controller|Haotong Lin|√|
|Cookie|Haotong Lin|√|
|Db|||
|Debug|大漠|√|
|Error|大漠||
|Exception|Haotong Lin|√|
|Hook|流年|√|
|Input|Haotong Lin|√|
|Lang|流年|√|
|Loader|流年||
|Log|||
|Model|||
|Response|大漠|√|
|Route|流年||
|Session|大漠|√|
|Template|oldrind||
|Url|流年||
|View|mahuan||