Contao ist ein Open-Source-PHP-Content-Management-System für Menschen, die eine professionelle Website wünschen, die einfach zu warten ist. Weitere Informationen finden Sie auf der Projektwebsite.
Der Contao-Testfall stellt einen PHPUnit-Testfall mit einigen nützlichen Methoden zum Testen von Contao bereit. Führen Sie php composer.phar require --dev contao/test-case
aus, um das Paket zu installieren und es dann in Ihren Testklassen zu verwenden:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
Die Methode getContainerWithContaoConfiguration()
simuliert einen Symfony-Container mit der Standardkonfiguration der Contao-Kernerweiterung.
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
Sie können auch ein Projektverzeichnis festlegen:
$ 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"
Die Methode mockContaoFramework)
verspottet ein initialisiertes Contao-Framework.
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
Die Methode fügt automatisch einen Config-Adapter mit den Contao-Einstellungen hinzu:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
Sie können optional weitere Adapter als Argument hinzufügen:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
Der angegebene Konfigurationsadapter überschreibt den Standardkonfigurationsadapter.
Die Methode mockAdapter()
simuliert einen Adapter mit den angegebenen Methoden.
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
Adapter mit einem einfachen Rückgabewert wie oben können weiter vereinfacht werden:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
Dieser Code macht genau das Gleiche wie der obige Code.
Die Methode mockClassWithProperties()
simuliert eine Klasse, die die magischen Methoden __set()
und __get()
zum Verwalten von Eigenschaften verwendet.
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
Wenn die zu verspottende Klasse schreibgeschützt ist, können Sie die Eigenschaften optional als Konstruktorargument übergeben:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
Wenn Sie eine Methode der Originalklasse aufrufen müssen, können Sie den Methodennamen als drittes Argument übergeben. Das resultierende Scheinobjekt ist ein teilweises Scheinobjekt ohne die angegebene(n) Methode(n).
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
Die mockTokenStorage()
simuliert einen Token-Speicher mit einem Token, das entweder einen Contao-Backend- oder Frontend-Benutzer zurückgibt.
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
Die Methode getTempDir()
erstellt ein temporäres Verzeichnis basierend auf dem Namen der Testklasse und gibt seinen Pfad zurück.
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
Das Verzeichnis wird nach Durchführung der Tests automatisch entfernt. Damit dies funktioniert, stellen Sie bitte sicher, dass Sie immer die übergeordnete Methode tearDownAfterClass()
aufrufen, wenn Sie die Methode in Ihrer Testklasse definieren!
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}