avto-dev/ dev-tools
PHP 开发者工具
Requires
- php: >=7.2
- ext-json: *
- avto-dev/stacked-dumper-laravel: ^1.1
- phpunit/phpunit: ^7.5 || ~8.0
- tarampampam/guzzle-url-mock: ^1.1
Requires (Dev)
- ext-pdo_sqlite: *
- ext-sqlite3: *
- jeremeamia/superclosure: ^2.4
- laravel/laravel: ^5.6 || ~6.0 || ~7.0
- phpstan/phpstan: ^0.12
Suggests
- codedungeon/phpunit-result-printer: PHPUnit Pretty Result Printer
- jeremeamia/superclosure: Library for closures serialization and hashing
- johnkary/phpunit-speedtrap: Reports on slow-running tests in your PHPUnit test suite
README
PHP 开发者工具
安装
使用以下命令通过 composer 安装此包:
$ composer require --dev avto-dev/dev-tools "^2.0"
需要安装
composer
(如何安装 composer)。
您需要修复包的主要版本。
使用方法
此包允许您轻松地将辅助工具集成到应用程序中,从而更有效地进行开发。它们可以分为以下几组:
Laravel 辅助服务
对于 Laravel 应用程序,您可以连接以下服务提供者:
服务提供者 | 其用途 |
---|---|
DatabaseQueriesLogger | 将所有对数据库的调用记录到应用程序的日志文件中 |
应用程序单元测试
在
PHPUnit
框架的上下文中
Bootstrap
Bootstrap 是一个在所有测试开始前只执行一次的文件。其主要任务是准备环境 - 创建临时文件目录(删除之前的),准备数据库模式等。
您可以在 PHPUnit
的配置中指定自己的 bootstrap 文件路径(./phpunit.xml
)
<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="./tests/bootstrap.php"> <!-- configuration --> </phpunit>
对于 Laravel 应用程序
编写递归创建目录、连接数据库的代码可能会让您感到很繁琐。为了简化这个任务,您可以为您的类创建一个 bootsrapper
,它能够在创建自己的实例时按顺序执行所有以 boot*
开头的方法。此外,$this->app
已经保存了您应用程序的实例(只需连接必要的 trait 即可)。请看以下示例:
<?php class MyBootstrap extends \AvtoDev\DevTools\Tests\Bootstrap\AbstractLaravelTestsBootstrapper { use AvtoDev\DevTools\Tests\PHPUnit\Traits\CreatesApplicationTrait; public function bootPrepareDatabase() { $this->app->make(Illuminate\Contracts\Console\Kernel::class)->call('migrate:refresh'); } }
您始终在启动测试前拥有“新鲜”的数据库模式。
其他应用程序
更简单的实现
<?php class MyBootstrap extends \AvtoDev\DevTools\Tests\Bootstrap\AbstractTestsBootstrapper { public function bootMakeSome() { // Put your code here } public function bootMakeSomethingElse() { // Put your code here } }
在两种情况下,都不要忘记创建
./tests/bootstrap.php
文件,在其中写入<?php new MyBootstrap();
,并在PHPUnit
的配置中指定<phpunit bootstrap="./tests/bootstrap.php">
。
抽象单元测试类
为了更方便地测试您的应用程序,您可以使用本包提供的抽象单元测试类(有适用于 Laravel 应用程序的版本,也有不依赖 Laravel 的版本)。
它们的独特之处在于包含额外的 assert
方法,这些方法可以让您编写更简洁、更富有表现力的测试。此功能通过特性启用,因此您可以在需要时创建自己的抽象类(不是从提供的类继承而来)并包含所需的功能集。
推荐使用抽象类的原因在于其功能将随着时间的推移而扩展,您可以通过执行单个命令 composer update avto-dev/dev-tools
来获取它们的新功能。
对于Laravel应用程序
从 AvtoDev\DevTools\Tests\PHPUnit\AbstractLaravelTestCase
继承您的测试类。
其他应用程序
从 AvtoDev\DevTools\Tests\PHPUnit\AbstractTestCase
继承您的测试类。
PHPUnit特性
以下是一个汇总表,列出了特性和它们提供的功能。所有特性都位于 AvtoDev\DevTools\Tests\PHPUnit\Traits
特性名称 | 功能 |
---|---|
AdditionalAssertionsTrait |
额外的assert方法 |
CreatesApplicationTrait |
创建Laravel应用程序实例的方法。使用该方法时,可以使用 beforeApplicationBootstrapped 和 afterApplicationBootstrapped 方法 |
InstancesAccessorsTrait |
用于访问类中受保护或私有方法/属性的方法(使用反射) |
LaravelEventsAssertionsTrait |
用于测试事件及其监听器的方法 |
LaravelLogFilesAssertsTrait |
测试Laravel应用程序日志文件的方法 |
LaravelCommandsAssertionsTrait |
测试Laravel artisan命令的方法 |
WithDatabaseQueriesLogging |
将此特性连接到测试类时,所有数据库查询都将记录到日志文件中(测试类必须继承自 AbstractLaravelTestCase ) |
CarbonAssertionsTrait |
用于测试 Carbon 对象的方法 |
WithDatabaseDisconnects |
将此特性连接到测试类时,在 tearDown 时将断开与所有数据库的连接(原因) |
WithMemoryClean |
将此特性连接到测试类时,在 tearDown 时将清除类的属性。要在 Laravel-framework 之外使用此特性,需要在 tearDown 时调用 clearMemory 方法 |
WithGuzzleMocking |
提供创建Guzzle 6 HTTP客户端处理器处理程序的方法的特性 |
AppVersionAssertionsTrait |
用于检查应用程序版本和文件 CHANGELOG.md 中指定的最新版本的方法 |
LaravelRoutesAssertsTrait |
用于检查Laravel路由配置正确性的方法 |
测试
对于包测试,我们使用 phpunit
框架和 docker-ce
+ docker-compose
作为开发环境。因此,在克隆存储库后,只需在终端中写入
$ make build $ make latest # or 'make lowest' $ make test
变更日志
变更日志可以在 此处找到。
支持
如果您发现任何包错误,请在当前存储库中 创建一个问题。
许可证
这是一个开源软件,根据 MIT许可证 许可。