zoukankan      html  css  js  c++  java
  • Document

    基于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): shineyorkjunit-laravel
    Namespace of package [ShineyorkJunitLaravel]:
    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来看就需要视图和路由。对于没有写过的小伙伴们可以参考别人是怎么操作的怎么写的。

    先把基础的调用方法的类写好 srcHttpControllersJunitController.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); } } ?>

    然后添加一下页面 resourcesviewsindex.blade.php

    Document

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


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

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

    composer require laravel/telescope --dev

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

    模仿着操作一下。

    添加路由srcHttp outes.php

    name('sjunit.store'); ?>

    添加服务提供者 srcJunitServiceProvide.php

    registerRoutes(); $this->loadViewsFrom( __DIR__.'/../resources/views', 'junit' ); } private function routeConfiguration() { return [ 'namespace' => 'ShineYorkJunitLaravelHttpControllers', '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

    IlluminateFoundationComposerScripts::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 | | ShineYorkJunitLaravelHttpControllersJunitController@index | |
    | POST | junit | sjunit.store | ShineYorkJunitLaravelHttpControllersJunitController@store | |
    +----------+----------+--------------+---------------------------------------------------------------+--------------+
    通过这个操作访问到在app下定义的test类中的index方法 http://127.0.0.1:8000/junit

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

  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/weixinsb/p/13051568.html
Copyright © 2011-2022 走看看