Ich wollte mich endlich mal mit Unittest beschäftigen um die Entwicklungszykeln für unsere Plugins in Zukunft zu verkürzen.
Leider scheitere ich schon daran die Klassen für die ich Tests schreiben möchte in meine Testklassen zu laden.
In der Hoffnung das mir geholfen werden kann hier grob die Struktur des Plugins sowie der Tests:
Das ganze ist Shopware _ 5.2.21 _
In engine/Shopware/Plugins/Community/Frontend/MyPlugin wird das Plugin auf den entsprechenden NS (‘MyPlugin’) registriert.
In der phpunit.xml.dist ist entsprechendes folgendes zu finden:
./Tests/Functional
./Tests/Unit
./Tests/Unit
./Tests/Functional
disable
./
In _ MyPlugin/Tests/bootstrap.php _
boot();
$container = $kernel->getContainer();
$container->get('plugins')->Core()->ErrorHandler()->registerErrorHandler(E_ALL | E_STRICT);
/** @var $repository \Shopware\Models\Shop\Repository */
$repository = $container->get('models')->getRepository('Shopware\Models\Shop\Shop');
$shop = $repository->getActiveDefault();
$shop->registerResources();
if (!self::assertPlugin('MyPlugin')) {
throw new \Exception("Plugin MyPlugin must be installed.");
}
Shopware()->Loader()->registerNamespace('MyPlugin\Tests', __DIR__. '/../Tests/');
Shopware()->Loader()->registerNamespace('Tests\Helper', __DIR__. '/Helper/');
Shopware()->Loader()->registerNamespace('Shopware\Components', __DIR__. '/../Components/');
Shopware()->Loader()->registerNamespace('Shopware\CustomModels', __DIR__. '/../Models/');
self::registerResources();
}
/**
* @param string $name
* @return boolean
*/
private static function assertPlugin($name)
{
$sql = 'SELECT 1 FROM s_core_plugins WHERE name = ? AND active = 1';
return (boolean) Shopware()->Container()->get('dbal_connection')->fetchColumn($sql, [$name]);
}
/**
* Registers all necessary classes to the di container.
*/
private static function registerResources()
{
}
}
NyPluginTestKernel::start();
~
In _ MyPlugin/Tests/Functional/MyPluginTest.php _
Der entsprechende Helper liegt unter _ MyPlugin/Components/ _ und sieht grob wie folgt aus:
Jede Hilfe ist willkommen.