楼主:
GALINE (天真可爱CQD)
2019-03-18 01:09:05※ 引述《q10242 (黑田祐司)》之铭言:
: 想请问板上的各位先进
: 最近在写laravel的自制package
: 我想问的是
: 如果我的package里面有两个自制的 class
: 都在同一个子资料夹 test里面
: namespace 是test\foo 跟test\bar
: 是不是Service provider的部分的boot 的 make方法 就只能
: $this->app->make(test\foo::class);
: $this->app->make(test\bar::class);
: 这样写两次
: 不能test资料夹底下的一次全都load吗?
跟 laravel 不熟,不过没弄错的话你可以把你要的东西放在 boot 的参数
laravel 会在 boot 的时候会很神奇的自动塞给你
https://laravel.com/docs/5.8/providers#the-boot-method
参照 Boot Method Dependency Injection
: 第二个问题是
: 如果要在laravel写test
: 是不是一定要先用use加载要test的那个class
任何 class 使用前一定要先加载
不论是你自己 include,或是靠 autoload 自动加载,或是其他人写的程式帮你加载
use 不会加载 class
只是用来表示“在现在这个 php 档案里面,这个短短的 Class 名字其实是那个很长的 class”
真正加载 class 的是 include,不论是你自己 include 还是 autoloader 帮你 include
use Super\Database\Model\Chu; // 后面的 Chu 是 \Super\Database\Model\Chu 喔
use Super\Database\Model\Miew as Hehe; // 后面的 Hehe 是 \Super\Database\Model\Miew 喔
new Chu(); // 我会 new 一个 \Super\Database\Model\Chu 出来
new Miew(); // 我会喷 Error 给你看
// 因为我不认识 Miew 只认识 \Super\Database\Model\Miew 跟 Hehe
如果你设定都正确,composer 会帮你写好能自动帮你加载 class 的程式
你只要在所有测试开始之前 include composer 做好的 autoload.php 就行了
至于这一行写在哪里,下一段会来说清楚
: 第三个问题是
: 如果要把test放进package资料夹里面
: 要怎么样可以让laravel里面的phpunit打指令测试的时候吃得到这个test
默认状态下 phpunit 会去读你执行 phpunit 的路径的 phpunit.xml
这个档案会控制 phpunit 的执行设定,也包括 Test Suite 里面有哪些档案
(Test Suite 白话说就是“一组测试”。大专案可能有很多组测试,小专案有一组就可以了)
简单的 phpunit.xml 长这样
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="./tests/bootstrap.php">
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
乍看很长,但翻译成白话其实只有两句
=> 执行测试之前,先执行 ./tests/bootstrap.php
通常我们会希望有只档案预先做些准备工作,例如上面提到的 include autoload.php
从 tests/ 去 vendor/ 资料夹,那就是 include __DIR__ . '/../vendor/autoload.php';
=> 要执行的测试,是 ./tests/ 资料夹里面所有的 *Test.php
phpunit 默认会吃 *Test.php,只要你告诉他放在哪个资料夹里面就好
也可以写明要吃的档案结尾,例如 <directory suffix="Test.php">./tests/</directory>
顺带一提,phpunit 也支援 phpt(PHP 官方的测试格式)
一样是用 <directory suffix=".phpt">./tests/</directory> 来加载
这种格式虽然看起来很...很有古风,但是拿来测 2012 之前的程式还满好用的
另,有些专案可能会放一个 phpunit.xml.dist,意义是一样的
phpunit 会以 phpunit.xml 为优先,然后才是 phpunit.xml.dist
分两个档案的目的是,专案共用的可以放在 phpunit.xml.dist
但有时候你开发到一半想改一些你自己的设定,可以用 phpunit.xml 盖过专案设定
欲知更多详情,请参照官方文件
https://phpunit.readthedocs.io/en/8.0/configuration.html