-
這不是測
private method,是測private property -
之前不小心在哪裡看到原來 PHPUnit 有內建可以 access 到 private 的函式,如下:
$this->assertObjectHasAttribute('name', $target);$this->assertAttributeEquals('Ken', 'name', $target);
-
這個 repo 就只是為了驗證不小心哪裡看來的功能真的能用,哈。
mkdir yourProj && cd yourProj建專案目錄composer init如果已經存在 composer.json 的話可省去這一步composer require --dev phpunit/phpunit透過 composer 下載安裝 phpunitgit init初始化一個 git repo,如果不需要版控可以省略接下來 git 開頭的指令git add .git commit -m'init commit'./vendor/bin/phpunit --generate-configuration建立 phpunit.xmlmkdir src放 source codemkdir tests放 test case,記得檔案要以xxxxxTest.php結尾- 參考這裡 看看 src 和 tests 裡面寫什麼,還要記得對
composer.json做 psr-4 設定 - 寫好你的第一個 test case,exmaple,並執行
./vendor/bin/phpunit(以下簡稱「跑測試」) 應該可以看到第一個綠燈
-
在
src/ToTestSetter.php有設namespace App;所以在tests/ToTestSetterTest.php裡要 new 的時候應該要$obj = new App\ToTestSetter();,而且最上面應該要require __DIR__ . '/../src/ToTestSetter.php'; -
你會發現我 這裡 在 new 的時候並沒有加上
App\在前面,最上面也沒有require __DIR__ . '/../src/ToTestSetter.php';是因為三件事:- 最上面用
use App\ToTestSetter; composer.json裡設定的psr-4生效,產生正確的vendor/autoload.php檔用來自動載入 class。phpunit.xml裡有設定bootstrap=vendor/autoload.php所以跑測試時自動載入autoload.php,使用 psr-4 自動類別載入機制,所以不用另在tests/ToTestSetterTest.php最上面寫require __DIR__ . '/../src/ToTestSetter.php';。
- 最上面用
-
Composer
psr-4使用方式速成班:- 參考 這裡 在
composer.json的autoloadsection 中設定App這個 namespace 的 root folder 是src/ - 承上設定,所有
src/*.php的類別都要有namespace App;在最上面 - 如果有子資料夾如
src/Model/*.php,那類別最上面要用namespace App\Model;,再有子資料夾的話類推 - 類別名稱(class name) 必須和 PHP檔名
完全一樣,連大小寫都要一樣,例如:class ToTestSetter { public function __contruct() { .... } }就必須放在ToTestSetter.php裡面,同時類別名稱首字慣例要大寫! - 設定完要記得執行
composer dump來產生(或更新)vendor/autoload.php的內容。 - 最大好處:以後只要 follow 上述規則,並更新 autoload.php 檔,只要
require __DIR__ . '/../vendor/autoload.php';就不用以傳統方式 require 一堆其他 class 檔案。
- 參考 這裡 在