Contao 是一個開源 PHP 內容管理系統,適合想要一個易於維護的專業網站的人。造訪專案網站以了解更多資訊。
Contao 測試案例提供了 PHPUnit 測試案例以及一些用於測試 Contao 的有用方法。運行php composer.phar require --dev contao/test-case
來安裝該包,然後在測試類別中使用它:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
getContainerWithContaoConfiguration()
方法使用 Contao 核心擴充的預設設定模擬 Symfony 容器。
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
您也可以設定項目目錄:
$ container = $ this -> getContainerWithContaoConfiguration ( ' /tmp ' );
echo $ container -> getParameter ( ' kernel.project_dir ' ); // will output "/tmp"
echo $ container -> getParameter ( ' kernel.root_dir ' ); // will output "/tmp/app"
echo $ container -> getParameter ( ' kernel.cache_dir ' ); // will output "/tmp/var/cache"
mockContaoFramework)
方法模擬初始化的 Contao 框架。
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
此方法會自動新增具有 Contao 設定的 Config 轉接器:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
您可以選擇新增更多適配器作為參數:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
給定的配置適配器將覆蓋預設的配置適配器。
mockAdapter()
方法將使用給定的方法模擬適配器。
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
像上面這樣具有簡單傳回值的適配器可以進一步簡化:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
這段程式碼的作用與上面的程式碼完全相同。
mockClassWithProperties()
方法模擬一個使用神奇的__set()
和__get()
方法來管理屬性的類別。
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
如果要模擬的類別是唯讀的,您可以選擇將屬性作為建構函數參數傳遞:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
如果需要呼叫原始類別的方法,可以將方法名稱作為第三個參數傳遞。產生的模擬物件將是沒有給定方法的部分模擬物件。
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
mockTokenStorage()
使用傳回 Contao 後端或前端使用者的令牌來模擬令牌儲存。
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
getTempDir()
方法根據測試類別名稱建立臨時目錄並返回其路徑。
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
執行測試後,該目錄將自動刪除。為此,如果您在測試類別中定義了該方法,請確保始終呼叫父tearDownAfterClass()
方法!
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}