Contao は、メンテナンスが簡単なプロフェッショナルな Web サイトを求める人のためのオープンソース PHP コンテンツ管理システムです。詳細については、プロジェクトの Web サイトをご覧ください。
Contao テスト ケースは、Contao をテストするためのいくつかの便利なメソッドを備えた PHPUnit テスト ケースを提供します。 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"
元のクラスのメソッドを呼び出す必要がある場合は、メソッド名を 3 番目の引数として渡すことができます。結果として得られるモック オブジェクトは、指定されたメソッドを持たない部分的なモック オブジェクトになります。
$ 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 ();
}
}