基于laravel自定义测试组件

基于laravel自定义测试组件
0. 课程内容

composer的介绍和laravel的关系
composer工作原理...想跳过 (ノ´▽`)ノ♪
简要效果及功能介绍
开发laravel-简化版的单元测试组件-搭建

  1. composer的介绍和laravel的关系

建议可以看看这个手册:https://docs.phpcomposer.com/01-basic-usage.html

什么是composer?...没什么可介绍的 ✧。٩(ˊᗜˋ)و✧*。 百度,还是简单说一下就是一个专门管理PHP的扩展包的工具。

laravel 开发模式就是一种组件化的开发模式,把整个框架拆分为不同的单独的零件。每一个零件实际上就是一个单独的组件,每一个组件你都可以在composer的资源包中查找到

然后你可以在 https://packagist.org/ 查找到这个组件

所以实际laravel就是一个扩展包。

  1. composer工作原理

它主要由三个部分组成:命令行工具、包仓库、代码库:

Packagist
它是官方仓库,也就是我们平常说的 Composer 源,它的作用是存储这些包的信息,版本,代码来源,依赖,作者,主页等信息。官网是 https://packagist.org/, 你也可以将自己的包发布在上面,这样 Composer 工具就能搜索与安装你的包了,后面我们会具体介绍发布流程。

Repository
代码仓库,Packagist 支持公开与私有仓库,通常是 GitHub 作为代码仓库,当然也可以是 BitBucket 或者 GitLab。

Vendor directory
我们的 Composer 依赖包都统一安装在项目的 vendor 目录下,其中还有 vendor/composer 目录用于存储依赖包的一些基本信息,比如命名空间等。

然后composer的源码解析 https://segmentfault.com/a/1190000014948542

composer的目录结构:

vendor/
├── .editorconfig # 编辑器配置文件,比如缩进大小、换行模式等
├── .gitattributes # git 配置文件,可以设计导出时忽略文件等
├── .gitignore # git 忽略文件配置列表
├── .php_cs # PHP-CS-Fixer 配置文件
├── README.md
├── composer.json
├── phpunit.xml.dist
├── src # 源代码核心目录
│ └── .gitkeep
└── tests # 用于存放单元测试或者功能测试的测试用例代码,与 src 组织规则基本一致
└── .gitkeep
我们可以直接引用第三方别人写好的构建composer包的工具

$ composer global require "overtrue/package-builder" --prefer-source
$ package-builder build [目标目录名]
3. 开发laravel-简化版的单元测试组件-搭建

构造项目

package-builder build junit-laravel

Name of package (example: foo/bar): shineyork\junit-laravel
Namespace of package [Shineyork\JunitLaravel]:
Description of package: A simplified version of the laravel framework unit test
Author name of package [ShineYork]:
Author email of package [shineyork@sixstaredu.com]:
License of package [MIT]:
Do you want to test this package ? [Y/n]:
Do you want to use php-cs-fixer format your code ? [Y/n]:
Standard name of php-cs-fixer [symfony]:
Package shineyork/junit-laravel created in: ./junit-laravel

对于如上的那个功能最为重要的几个功能点基于laravel来看就需要视图和路由。对于没有写过的小伙伴们可以参考别人是怎么操作的怎么写的。

先把基础的调用方法的类写好 src\Http\Controllers\JunitController.php

input('namespace'); $className = $request->input('className'); $action = $request->input('action'); $param = $request->input('param'); $class = ($className == "") ? $namespace : $namespace.'\\'.$className; // 要提换的值 需要的结果 $class = str_replace("/", "\\", $class); $object = new $class(); $param = ($param == "") ? [] : explode('|', $param) ; $data = call_user_func_array([$object, $action], $param); return (is_array($data)) ? json_encode($data) : dd($data); } } ?>

然后添加一下页面 resources\views\index.blade.php

<html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head>

不区分大小写(可以自行完善)


命名空间:可以写全,然后下面类名不用些
类名:命名空间全可以不用写
测试方法名:
传递参数以 | 分割:
对应的项目目录

那么怎么集成与laravel Σ(☉▽☉"a? 那么我们可以参考的观众选择与 laravel/telescope (这是laravel的一个调试工具) 之后再去解释这个玩意有什么用,把它单独的下载下来

composer require laravel/telescope --dev

实际上像laravel的这些组件就是通过laravel的服务容器进行加载的,然后启动laravel的时候执行laravel的这些服务容器中的boot方法加载路由以及视图

模仿着操作一下。

添加路由src\Http\routes.php

name('sjunit.store'); ?>

添加服务提供者 src\JunitServiceProvide.php

registerRoutes(); $this->loadViewsFrom( __DIR__.'/../resources/views', 'junit' ); } private function routeConfiguration() { return [ 'namespace' => 'ShineYork\JunitLaravel\Http\Controllers', 'prefix' => 'junit', ]; } private function registerRoutes() { Route::group($this->routeConfiguration(), function () { $this->loadRoutesFrom(__DIR__.'/Http/routes.php'); }); } } ?>

然后早config/app.php中添加对于这个服务提供者的加载

测试:
$ cd ../junit-laravel-test
$ composer create-project laravel/laravel laravel
$ cd laravel

配置包路径,注意,这里 ../junit-laravel 为相对路径,不要弄错了

$ composer config repositories.shineyork path ../../junit-laravel

安装扩展包

$ composer require shineyork/junit-laravel:dev-master

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals

  • Installing shineyork/junit-laravel (dev-master): Junctioning from ../../junit-laravel
    Writing lock file
    Generating optimized autoload files

Illuminate\Foundation\ComposerScripts::postAutoloadDump
@php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Discovered Package: shineyork/junit-laravel
Package manifest generated successfully.
然后随便在项目中添加一个测试的类Test.php

然后再通过php artisan route:list检测加载的路由

php artisan route:list
+----------+----------+--------------+---------------------------------------------------------------+--------------+
| Method | URI | Name | Action | Middleware |
+----------+----------+--------------+---------------------------------------------------------------+--------------+
| GET|HEAD | / | | Closure | web |
| GET|HEAD | api/user | | Closure | api,auth:api |
| GET|HEAD | junit | | ShineYork\JunitLaravel\Http\Controllers\JunitController@index | |
| POST | junit | sjunit.store | ShineYork\JunitLaravel\Http\Controllers\JunitController@store | |
+----------+----------+--------------+---------------------------------------------------------------+--------------+
通过这个操作访问到在app下定义的test类中的index方法 http://127.0.0.1:8000/junit

然后发现ok那就这样 (o゚▽゚)o

posted @ 2020-06-05 19:28  kakasaber  阅读(204)  评论(0编辑  收藏  举报