Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Testen: PHPUnit, Datenbanktests und Prüfungen

Wie Sie eine Anwendung auf Exponential testen, für Entwickler, die WebTestCase, die HTTP-Tests von Laravel, den Test-Client von Django oder die Systemtests von Rails gewohnt sind - PHPUnit ohne Datenbank für Dienste…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/web-framework-developers/testing.md

On this page

This page is a translation. Read the English original

Testen: PHPUnit, Datenbanktests und Prüfungen

Diese Seite richtet sich an Entwickler, die mit dem Testwerkzeug eines Frameworks testen: WebTestCase von Symfony, HTTP-Tests und Factories von Laravel, Test-Client und Fixtures von Django, Systemtests von Rails. Die Tests von Exponential sind reines PHPUnit. Der Kernel führt die meisten seiner Suites ohne Datenbank aus, einige wenige gegen eine Wegwerf-Datenbank, und ergänzt Prüfungen für Templates, Einstellungen und Links. Machen Sie es in Ihrer Erweiterung genauso (Anwendungen testen).

Inhalt

  1. Die Ebenen
  2. Unit-Tests ohne Datenbank
  3. Tests mit Datenbank
  4. Templates, Einstellungen und Seiten
  5. Die CI des Kernels als Vorbild
  6. Was keine eingebaute Entsprechung hat

Die Ebenen

EbeneWerkzeugFindet
Syntaxphp -l, bin/php/eztemplatecheck.phpParse-Fehler in PHP und Templates
UnitPHPUnit, ohne Datenbankdie Logik von Diensten, Validatoren, Handlern, Operatoren
IntegrationPHPUnit mit tests/runtests.php --dsn ...SQL, persistente Objekte, Inhaltsoperationen
Gerenderte SeitenHTTP-Requests, BrowserautomatisierungTemplates, Berechtigungen, Weiterleitungen
Barrierefreiheit und CSPein Prüfwerkzeug für Barrierefreiheit, das CSP-BerichtsprotokollBarrieren, Inline-Code

Unit-Tests ohne Datenbank

phpunit.xml lädt tests/bootstrap.php, das den Autoloader von Composer und das Test-Toolkit lädt, den Kernel aber nicht startet (PHPUnit-Tests ohne Datenbank):

<?php
// extension/expdemo/tests/expDemoColorValidatorTest.php
class expDemoColorValidatorTest extends PHPUnit\Framework\TestCase
{
    public function testAcceptsHexColors()
    {
        $this->assertTrue( expDemoColorValidator::isValid( '#a1b2c3' ) );
    }
}
vendor/bin/phpunit extension/expdemo/tests/

Das funktioniert, wenn die Logik in einfachen Klassen liegt, denen ihre Abhängigkeiten übergeben werden (Dependency Injection und Dienste). Halten Sie Datenbankzugriffe aus diesen Klassen heraus oder hinter einer Schnittstelle, die Sie im Test ersetzen können.

Tests mit Datenbank

tests/runtests.php --dsn <dsn> --db-per-test führt Suites gegen eine Wegwerf-Datenbank aus, so wie es der CI-Job des Kernels auf MySQL und PostgreSQL tut. Kennzeichnen Sie solche Tests mit @group database; vendor/bin/phpunit allein schließt diese Gruppe aus. Richten Sie Tests niemals auf eine Datenbank, die echte Inhalte enthält (PHPUnit im Teststandard).

Das Test-Toolkit in tests/toolkit/ enthält die Basisklassen ezpTestCase und ezpDatabaseTestCase sowie ezpINIHelper::setINISetting() / restoreINISettings(), um eine Einstellung für einen einzelnen Test zu ändern.

Model-Factories gibt es nicht: Legen Sie die Inhalte, die Ihr Test braucht, mit eZContentFunctions::createAndPublishObject() und Remote-IDs an, und Ihre eigenen Zeilen mit eZPersistentObject::store().

Templates, Einstellungen und Seiten

php bin/php/eztemplatecheck.php -s<siteaccess> extension/expdemo/design/   # every template of your extension
./console exp:ini where expdemo.ini/ListSettings/DefaultLimit <siteaccess>  # settings resolve as expected

Für Seiten senden Sie HTTP-Requests an eine laufende Installation (den eingebauten Server von PHP über die Engine php von Velocity oder einen Testhost), als anonymer Besucher, als eingeschränkter Benutzer und als Redakteur. Verwenden Sie einen eigens für den Lauf angelegten Testbenutzer, niemals ein gemeinsam genutztes Administratorkonto. Prüfen Sie die Browserkonsole und var/log/csp.log auf blockierten Inline-Code.

Die CI des Kernels als Vorbild

Die phpunit.xml des Kernels hat 23 Suites; GitHub Actions führt sie auf PHP 8.1 bis 8.5 ohne Datenbank und auf MySQL und PostgreSQL mit Datenbank aus, dazu Syntax, PHPStan, Codestil und einen Starttest unter PHP 8.0. tests/test-map.json ordnet Quelldateien ihren Tests zu, sodass eine Änderung vor einem Push nur ihre eigenen Tests ausführt (Standard für Tests und CI, Continuous Integration für Erweiterungen).

Was keine eingebaute Entsprechung hat

Funktion im FrameworkIn Exponential
Ein Kernel-Test-Client, der einen Request im Prozess verarbeitet (WebTestCase, $this->get(), Django Client)keiner; testen Sie Dienste direkt und Seiten über HTTP
Model-Factories, Fixture-LoaderAufrufe der Inhalts-API und Startdatenzeilen in .dba
Rollback der Transaktion pro Test--db-per-test mit einer Wegwerf-Datenbank
Mail-Attrappender Mail-Transport file in einer Testvariante der Umgebung (Umgebungen)

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x