PHPackages                             andyoung/think-tests - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. andyoung/think-tests

ActiveThink-framework[Framework](/categories/framework)

andyoung/think-tests
====================

think-tests

1.0.1(6y ago)1121[1 PRs](https://github.com/AndyYoungCN/think-tests/pulls)MITPHPPHP &gt;=7.0.0

Since Dec 2Pushed 3y ago1 watchersCompare

[ Source](https://github.com/AndyYoungCN/think-tests)[ Packagist](https://packagist.org/packages/andyoung/think-tests)[ Docs](https://github.com/AndyYoungCN/think-tests)[ RSS](/packages/andyoung-think-tests/feed)WikiDiscussions master Synced 4d ago

READMEChangelog (7)Dependencies (4)Versions (10)Used By (0)

ThinkPHP 5.1 集成 PHPUnit 8 测试框架
==============================

[](#thinkphp-51-集成-phpunit-8-测试框架)

**本项目仅适用于运行 PHP7.2 以上的环境！对于低版本 PHP 请根据需要调整 PHPUnit 的版本！**

声明
--

[](#声明)

由于原项目 [think-testing](https://github.com/top-think/think-testing) 长久不更新导致无法兼容最新版本的PHP和PHpstrom,无法像java一样进行单元调试。所以在此改造一番。

- PHPUnit基础请参考[PHPUnit](https://blog.csdn.net/agonie201218/article/details/89675236)
- [官方文档](http://www.phpunit.cn/)

### 版本号参考

[](#版本号参考)

PHP 版本PHPUnit 版本7.3, 7.287.1 （仅安全更新，2019 年 12 月 1 日起停止支持）77.0 （已经停止支持）65.6 （已经停止支持）55.5, 5.4, 5.3 （已经停止支持）4教程
--

[](#教程)

1. 首先你要学会使用 [Composer](https://getcomposer.org/download/)，可以参考 [laravel-china](https://learnku.com/composer/t/4484/composer-mirror-use-help) 的这篇教程，里面包含了从安装 Composer 开始到配置国内镜像加速源全套流程，速度不佳还可以尝试使用 [Packagist / Composer 中国全量镜像（含安装教程）](https://pkg.phpcomposer.com/) 或者 [阿里云 Composer 全量镜像](http://mirrors.aliyun.com/composer/)。请尽可能使用比较新的 Composer 版本！截止我写这篇文章时，我的 Composer 版本号是 `Composer version 1.8.6 2019-06-11 15:03:05`（使用 `composer --version` 查看）
2. 在自己的项目下安装 PHPUnit 扩展和必要的 `symfony/dom-crawler` 扩展，以及使用的 think-testing 包中会用到的 `topthink/think-helper`，参考命令：

    ```
    $ composer require phpunit/phpunit=^8 --dev
    $ composer require symfony/dom-crawler=^2.8.8 --dev
    $ composer require topthink/think-helper
    ```

    请注意安装的版本号，再次强调：

    \*\*PHPUnit 的版本号要和 PHP 的版本相对应！并不是越高越好！ \*\* 具体的版本号请参考开头的表格，把 `=^8` 替换成对应的数字即可。

    `symfony/dom-crawler` 扩展之所以使用 2.8.8~3.0 以前版本主要是为了模拟原 [think-testing](https://github.com/top-think/think-testing) 项目中模拟爬取网页 DOM 节点部分所使用的包，因为我的开发不涉及页面部分故高版本未作测试。

    ` topthink/think-helper` 扩展会自动根据你当前的 ThinkPHP 主框架版本确定，所以无需指定版本号。
3. 在自己的项目根目录下创建 `tests` 文件夹，修改 `composer.json` 文件的 `"autoload"` 部分：在 `"psr-4"`后面的列表中添加：

    ```
    "tests\\": "tests",
    "think\\": "thinkphp/library/think",
    "traits\\": "thinkphp/library/traits"
    ```

    添加完成的 `"autoload"` 部分应该长这样：

    ```
    "autoload": {
        "psr-4": {
            "app\\": "application",
            "tests\\": "tests",
            "think\\": "thinkphp/library/think",
            "traits\\": "thinkphp/library/traits"
        }
    }
    ```

    完成后在项目根目录执行 `composer update` 生成 autoload 文件
4. 在任意位置新建文件夹并进入，在新建的这个文件夹里使用 `composer require topthink/think-testing` 安装官方的 [think-testing](https://github.com/top-think/think-testing) 项目，拷贝 `vendor/topthink/think-testing/src/` 目录下除 `config.php` 文件和 `command` 文件夹外所有文件到自己的项目根目录下的 `tests` 文件夹中，修改所有文件的 `namespace` 命名空间为 `tests`。
5. 在你的项目根目录创建名为 `phpunit.xml` 的文件，用于指定自动测试，内容如下：

    ```

                ./tests/

                application/

    ```
6. 在 `tests/TestCase.php` 文件中添加 `__construct` 方法如下：

    ```
    public function __construct(?string $name = null, array $data = [], string $dataName = '') {
        // 引入需要的环境
        require_once __DIR__ . '/../thinkphp/base.php';
        // 初始化 App 对象，并将 APP_PATH 指向项目的 application 目录
        App::getInstance()->path(__DIR__ . '/../application/')->initialize();

        parent::__construct($name, $data, $dataName);
    }
    ```
7. 在 `tests/TestCase.php` 文件中添加 `$baseUrl` 的成员变量如下：

    ```
    protected $baseUrl = '';
    ```

    **注意：如果开启了强制路由的选项，那这里要和你路由中配置的域名一致** ，如果不一致会报莫名其妙的 500 错误。
8. 从根目录下运行 `./vendor/bin/phpunit` 测试单元测试是否配置成功，如果出来的结果是类似于：

    ```
    $ ./vendor/bin/phpunit
    PHPUnit 8.2.4 by Sebastian Bergmann and contributors.

    Time: 6 ms, Memory: 2.00 MB

    No tests executed!
    ```

    那么恭喜你，环境是没啥问题了。
9. 最后一步，编写一个简单的测试，在 `tests` 文件夹中创建名为 `BasicTest.php` 的测试文件，内容如下：

    ```
