Re: [請益] laravel 的service provider 和測試問題
※ 引述《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
--
不可以!那是黑鷹族的精神象徵!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.53.78
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1552842552.A.F7A.html
※ 編輯: GALINE (1.173.53.78), 03/18/2019 01:23:16
推
03/18 08:48,
5年前
, 1F
03/18 08:48, 1F
※ 編輯: GALINE (60.248.122.206), 03/18/2019 12:06:20
推
03/18 23:00,
5年前
, 2F
03/18 23:00, 2F
推
03/21 21:17,
5年前
, 3F
03/21 21:17, 3F
推
03/22 00:52,
5年前
, 4F
03/22 00:52, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章