Ich habe diese Frage auf StackOverflow gestellt und es wurde vorgeschlagen, dass ich sie hier stelle.
Ich kenne mich mit Unit- / System- / Integrationstests aus und möchte meine Joomla-Komponente testen können. Gibt es eine Standardmethode dafür?
Ich arbeite an diesem Beispiel für eine Joomla-MVC-Komponente , die keine Tests enthält. Alles, was ich in der Joomla-Dokumentation und auf verschiedenen Websites finden kann, sind Fragmente von Testcode- und bootstrap.php-Dateien. Konkret würde ich gerne wissen:
- Speicherort des Komponententestcodes
- Muss ich meine eigene bootstrap.php-Datei bereitstellen oder gibt es eine Möglichkeit, einfach Joomla einzuschließen und meine Tests auszuführen?
Im Idealfall könnte mich jemand an eine Open-Source-Joomla-Komponente weiterleiten, die Tests und Anweisungen zu deren Ausführung enthält (hatte einen kurzen Blick, die ersten 5 oder so hatten keine Tests).
Das nächste , was ich gefunden habe, ist das , worauf ich meinen Dummy-Test aufgebaut habe.
Was ich bisher gemacht habe
Komponentenverzeichnisstruktur:
- Hallo Welt/
- Administrator/
- ...
- Tests /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- Seite? ˅/
- ...
- helloworld.xml
- Administrator/
Erster Versuch
Um die Tests auszuführen, installiere / kopiere ich die Komponente in meine Joomla-Installation. Ich führe dann den folgenden Befehl aus ~ joomla / administration / components / com_helloworld / tests aus:
php phpunit-4.2.phar --bootstrap bootstrap.php .
von dem ich empfange
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Ich habe festgestellt, dass meine bootstrap.php nicht korrekt ist und nicht die erforderlichen Joomla-Klassen geladen hat. Ich werde dies irgendwann untersuchen, aber dies scheint eine Menge Setup zu sein, nur um einige Tests zum Laufen zu bringen.
bootstrap.php:
<?php
error_reporting(E_ALL);
define('_JEXEC', 1);
define('BASEPATH',realpath(dirname(__FILE__).'/../../'));
define('JOOMLA_PATH',realpath(dirname(__FILE__).'/../../../../../'));
define('JOOMLA_ADMIN_PATH',realpath(dirname(__FILE__).'/../../../../'));
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['REQUEST_METHOD'] = 'GET';
if (file_exists(JOOMLA_ADMIN_PATH . '/defines.php'))
{
include_once JOOMLA_ADMIN_PATH . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', JOOMLA_ADMIN_PATH);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_BASE . '/includes/helper.php';
require_once JPATH_BASE . '/includes/toolbar.php';
define('JPATH_COMPONENT',JOOMLA_ADMIN_PATH.'/components/com_content');
$app = JFactory::getApplication('administrator');
include BASEPATH.'/controller.php';
modelsHelloWorldsTest.php:
<?php
class HelloWorldsTest extends \PHPUnit_Framework_TestCase {
public function testList(){
$c = new ContentController();
$model = $c->getModel('helloworlds');
$worlds = $model->getItems();
var_dump($worlds);
$this->assertNotEmpty($worlds);
}
}
phpunit.xml:
<phpunit bootstrap="bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
verbose="true">
</phpunit>
Zweiter Versuch
Nachdem ich diese Antwort gesehen habe , habe ich meine Tests unter test / unit in meiner Joomla-Installation abgelegt, phpunit.dist.xml und bootstrap.php aus dem Joomla-cms-Repo an die entsprechenden Speicherorte kopiert und trotzdem die
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Fehler, den ich zuvor erhalten habe.