PHP-Version | Atoum-Version |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (aktuell) |
Genau wie SimpleTest oder PHPUnit ist Atoum ein Unit-Test-Framework speziell für die PHP-Sprache. Allerdings wurde es von Anfang an unter Berücksichtigung folgender Ideen konzipiert:
Schnell umsetzbar,
Vereinfachen Sie die Testentwicklung,
Ermöglichen Sie das Schreiben zuverlässiger, lesbarer und klarer Komponententests.
Um dies zu erreichen, nutzt es massiv die von PHP bereitgestellten Funktionen, um dem Entwickler eine völlig neue Möglichkeit zum Schreiben von Unit-Tests zu bieten. Daher kann es äußerst einfach installiert und in ein bestehendes Projekt integriert werden, da es nur ein einziges PHAR-Archiv ist, das den einzigen Einstiegspunkt für den Entwickler darstellt. Dank seiner fließenden Benutzeroberfläche ermöglicht es außerdem das Schreiben von Unit-Tests in einer Art und Weise, die der natürlichen Sprache nahe kommt. Dank der intelligenten Verwendung anonymer Funktionen und Abschlüsse ist es außerdem einfacher, Stubbing in Tests zu implementieren. Atoum führt die Ausführung jedes Unit-Tests nativ und standardmäßig in einem separaten PHP-Prozess durch, um die Isolation zu gewährleisten. Selbstverständlich lässt es sich nahtlos für die kontinuierliche Integration nutzen und ist aufgrund seines Designs sehr einfach an spezifische Anforderungen anpassbar. Atoum erreicht all dies ohne Beeinträchtigung der Leistung, da es so entwickelt wurde, dass es einen geringeren Speicherbedarf aufweist und gleichzeitig eine beschleunigte Testausführung ermöglicht. Es kann auch Unit-Test-Ausführungsberichte im Xunit-Format generieren, wodurch es mit Continuous-Integration-Tools wie Jenkins kompatibel ist. Atoum generiert außerdem Code-Coverage-Berichte, um die Überwachung von Unit-Tests zu ermöglichen. Obwohl es hauptsächlich unter UNIX entwickelt wurde, kann es schließlich auch unter Windows funktionieren.
Atoum ist wirklich einfach zu installieren: Klonen Sie es von Github, laden Sie seinen PHAR herunter oder verwenden Sie einfach Composer.
atoum bietet ein hohes Maß an Sicherheit bei der Testausführung, indem jede Testmethode in einem eigenen PHP-Prozess isoliert wird. Natürlich ist diese Funktion sofort verfügbar, es muss keine zusätzliche Erweiterung installiert werden.
atoum führt Tests in einer parallelisierten Umgebung durch, um die Suite so schnell wie möglich laufen zu lassen, indem die Vorteile der heutigen Multi-Core-CPUs genutzt werden.
Atoum bietet einen umfassenden Satz natürlicher und ausdrucksstarker Aussagen, die Tests so lesbar wie möglich machen. Hier ist ein Beispiel:
<?php$this->integer(150) ->isGreaterThan(100) ->isLowerThanOrEqualTo(200) ;
atoum unterstützt eine BDD-ähnliche Syntax mit vielen strukturellen Schlüsselwörtern:
<?php$this->given($testedInstance = new reviewedClass()) ->und($testedClass[] = $firstValue = uniqid()) ->then->sizeof($testedInstance)->isEqualTo(1) ->string($testedClass[0])->isEqualTo($firstValue) ;
Atoum bietet eine absolut einfache, aber sehr leistungsstarke Schein-Engine:
<?php$this->given($testedInstance = new reviewedClass()) ->and($aMock = new mockfoobar()) // hier wird dynamisch ein Mock der Klasse foobar erstellt->and($this->calling($aMock)->doOtherThing = true) // jeder Aufruf von doOtherThing( ) durch die Instanz wird true->and($testedInstance->setDependency($aMock)) zurückgeben ->then->boolean($testedInstance->doSomething())->isTrue() ->mock($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // Bestätigt, dass die doOtherThing()-Methode von $aMock einmal aufgerufen wurde;
atoum bietet eine klare API zur Geltendmachung von Ausnahmen:
<?php$this->given($testedInstance = new reviewedClass()) ->and($aMock = new mockfoobar()) // hier wird dynamisch ein Mock der Klasse foobar erstellt->and($this->calling($aMock)->doOtherThing->throw = $Exception = neue Ausnahme( )) // Aufruf von doOtherThing() löst eine Ausnahme aus->and($testedInstance->setDependency($aMock)) ->then->Exception(function() use ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($Exception) ;
Mit Atoum können Sie auch native PHP-Funktionen nachahmen. Auch dies ist sofort verfügbar:
<?php$this->given($this->function->session_start = false) ->und($session = new reviewedClass()) ->then->Exception(function () use ($session) { $session->start(); }) ->isInstanceOf('projectnamespaceException') ->hasMessage('Sitzung konnte nicht gestartet werden') ->function('session_start')->wasCalled()->once() ;
Atoum ist in der Lage, mehrere Berichte wie TAP, Clover und xUnit zu erstellen, die problemlos in Jenkins oder jedes andere kontinuierliche Integrationstool integriert werden können.
atomum unterstützt Datenanbieter,
Atoum -Tests unterstützen Autorun: Binden Sie einfach den Atoum -Runner ein und starten Sie Ihren Test mit php path/to/test/file.php
.
Die Konfigurationsdatei von atoum ist ausschließlich in PHP geschrieben (kein XML, YAML oder ein anderes Format), was Ihnen die beste Flexibilität bietet:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
Atoum bietet einen automatischen Testvorlagengenerator.
Atoum bietet einen Schleifenmodus, um fehlgeschlagene Tests einfach erneut auszulösen.
Atoum ist voller weiterer interessanter Funktionen, die Sie im Laufe der Zeit entdecken werden.
Atoum benötigt unbedingt PHP >= 5.6.0
oder höher, um zu funktionieren. Um unter UNIX zu überprüfen, ob Sie über die richtige PHP-Version verfügen, müssen Sie lediglich den folgenden Befehl in Ihrem Terminal ausführen:
$ php -v | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
Wenn PHP 5.6.x
oder gleichwertig angezeigt wird, ist die richtige PHP-Version installiert. Wenn Sie Atoum über sein PHAR-Archiv nutzen möchten, benötigen Sie außerdem PHP, um auf das normalerweise standardmäßig verfügbare phar
-Modul zugreifen zu können. Um unter UNIX zu überprüfen, ob Sie über dieses Modul verfügen oder nicht, müssen Sie lediglich den folgenden Befehl in Ihrem Terminal ausführen:
$ php -m | grep -i phar
Wenn Phar
oder ein Äquivalent angezeigt wird, ist das Modul ordnungsgemäß installiert. Für die Generierung von Berichten im Xunit-Format ist das xml
Modul erforderlich. Um unter UNIX zu überprüfen, ob Sie über dieses Modul verfügen oder nicht, müssen Sie lediglich den folgenden Befehl in Ihrem Terminal ausführen:
$ php -m | grep -i xml
Wenn Xml
oder ein gleichwertiges Dokument angezeigt wird, ist das Modul ordnungsgemäß installiert. Wenn Sie die Abdeckungsrate Ihres Codes durch die Unit-Tests überwachen möchten, ist das Modul Xdebug 2.3 erforderlich. Um unter UNIX zu überprüfen, ob Sie über dieses Modul verfügen oder nicht, müssen Sie lediglich den folgenden Befehl in Ihrem Terminal ausführen:
$ php -v | grep -oi 'xdebug'
Wenn Xdebug
oder ein gleichwertiges Element angezeigt wird, ist das Modul ordnungsgemäß installiert.
Sie müssen lediglich das PHAR-Archiv herunterladen und an einem beliebigen Ort speichern, beispielsweise unter /path/to/project/tests/atoum.phar
. Dieses PHAR-Archiv enthält die neueste Entwicklungsversion, die alle Unit-Tests von Atoum bestanden hat. Der Quellcode von atoum ist auch über das GitHub-Repository verfügbar. Um zu überprüfen, ob Atoum mit Ihrer Konfiguration korrekt funktioniert, können Sie alle Komponententests ausführen. Dazu müssen Sie lediglich den folgenden Befehl in Ihrem Terminal ausführen:
$ php atoum.phar --test-it
Erstellen Sie mit Ihrem bevorzugten Texteditor die Datei path/to/project/tests/units/helloWorld.php
und fügen Sie den folgenden Code hinzu:
<?phpnamespace sellerprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use sellerproject;class helloWorld erweitert atoumtest {öffentliche Funktion testSay() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!'); } }
Starten Sie Ihr Terminal und führen Sie den folgenden Befehl aus:
$ php path/to/test/file[enter]
Sie sollten das folgende Ergebnis oder etwas Ähnliches erhalten:
> Atomversion XXX von Frédéric Hardy. Fehler: Unbeaufsichtigte Ausnahme: Die getestete Klasse „vendorprojecthelloWorld“ ist für die Testklasse „vendorprojecttestsunitshelloWorld“ nicht vorhanden.
Erstellen Sie erneut mit Ihrem bevorzugten Texteditor die Datei path/to/project/classes/helloWorld.php
und fügen Sie den folgenden Code hinzu:
<?phpnamespace sellerproject;class helloWorld {öffentliche Funktion say() {return 'Hallo Welt!'; } }
Führen Sie im selben Terminal den folgenden Befehl noch einmal aus:
$ php path/to/test/file[enter]
Sie sollten das folgende Ergebnis oder etwas Ähnliches erhalten:
> atoum Version 288 von Frédéric Hardy.> Führen Sie VendorprojecttestsunitshelloWorld aus... [S_______________________________________________________________][1/1] => Testdauer: 0,00 Sekunden. => Speichernutzung: 0,25 MB.> Gesamttestdauer: 0,00 Sekunden.> Gesamttestspeichernutzung: 0,25 MB.> Codeabdeckungswert: 100,00 %> Ausführungsdauer: 0,08 Sekunden.> Erfolgreich (1 Test, 1 Methode, 2 Behauptungen , 0 Fehler, 0 Ausnahme)!
<?phpnamespace sellerprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';use atoumatoum;use sellerproject;class helloWorld erweitert atoumtest {öffentliche Funktion test__construct() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello!') ->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Hello ' . $name . '!') ; } }
Die Dokumentation von atomum wird noch geschrieben. Wir freuen uns über jede Hilfe zur Verbesserung. Wenn Sie jedoch sofort die Möglichkeiten von atoum weiter erkunden möchten, empfehlen wir:
Führen Sie in Ihrem Terminal entweder den Befehl php atoum.phar -h
oder den Befehl php scripts/runner.php -h
aus.
Untersuchen Sie den Inhalt des configurations
in der Quelle von atoum , da es Beispiele für Konfigurationsdateien enthält.
Untersuchen Sie den Inhalt des Verzeichnisses tests/unit/classes
in der Quelle von atoum , da es alle Komponententests enthält.
Lesen Sie die (französischen) Konferenzfolien dazu, die online verfügbar sind.
Lesen Sie das (französische) Wiki,
Treten Sie dem Diskussionskanal bei,
Stellen Sie Fragen per E-Mail an die Adresse support[AT]atoum(DOT)org .
In diesem Fall sollten Sie zunächst prüfen, ob Sie über die neueste Version des Archivs verfügen. Sie müssen es nur noch einmal herunterladen. Wenn es immer noch nicht funktioniert, führen Sie den folgenden Befehl in einem Terminalfenster aus:
$ php -n atom.phar -v
Wenn Sie die Versionsnummer von atoum erhalten, liegt das Problem an Ihrer PHP-Konfiguration. In den meisten Fällen liegt die Ursache in Erweiterungen, die möglicherweise nicht mit dem PHAR-Format kompatibel sind oder aus Sicherheitsgründen die Ausführung von PHAR-Archiven verhindern würden. Die ioncube
Erweiterung scheint beispielsweise nicht mit PHAR-Archiven kompatibel zu sein, und Sie müssen sie daher deaktivieren, wenn Sie sie verwenden, indem Sie die folgende Zeile aus Ihrer php.ini
auskommentieren und ihr das Präfix ;
voranstellen. Charakter:
zend_extension = /path/to/ioncube_loader*.*
Die suhosin
-Erweiterung verhindert die Ausführung von PHAR-Archiven. Daher muss ihre Standardkonfiguration geändert werden, um atoum verwenden zu können, indem Sie die folgende Zeile in Ihre php.ini
Datei einfügen:
suhosin.executor.include.whitelist="phar"
Wenn schließlich die Ausführung von atoum dazu führt, dass auf dem Bildschirm Zeichen angezeigt werden, die wie ???%
aussehen, liegt das daran, dass die Anweisung detect_unicode
in Ihrer php.ini
Datei auf 1 gesetzt ist. Um das Problem zu beheben, müssen Sie sie nur auf 0 setzen Bearbeiten Sie Ihre php.ini
Datei oder führen Sie atoum mit dem folgenden Befehl aus:
$ php -d discover_unicode=0 atoum.phar [Optionen]
Wenn diese drei Vorgänge dazu führen, dass Atoum nicht funktioniert, empfehlen wir Ihnen, eine E-Mail an die Adresse support[AT]atoum(DOT)org zu senden und Ihre Konfiguration und Ihr Problem detailliert zu beschreiben. Sie können auch die Atoum- Entwicklungsmitarbeiter im Diskussionskanal des Atoum-Repositorys um Hilfe bitten.
__COMPILER_HALT_OFFSET__
bereits definiert /path/to/atoum.phar
Dieser Fehler entsteht durch die Tatsache, dass das Atoum PHAR-Archiv an mehr als einer Stelle in Ihrem Code mit include
oder require
eingebunden ist. Um dieses Problem zu beheben, müssen Sie das Archiv nur mit include_once
oder require_once
einbinden, um sicherzustellen, dass es nicht mehrmals eingebunden wird.
APC ist ein kostenloses, offenes und robustes Framework zum Zwischenspeichern und Optimieren von PHP-Zwischencode, der in Form einer PHP-Erweiterung verteilt wird. Beim Testen von Klassen, die APC verwenden, erhalten Sie möglicherweise eine Fehlermeldung, die besagt, dass die Funktion apc_fetch
keinen Wert abrufen kann. Wie alle PHP-Erweiterungen verfügt APC über einige Konfigurationsoptionen, um sie zu aktivieren:
apc.enabled
, ob APC aktiviert oder deaktiviert werden soll,
apc.enable_cli
, ob APC für PHP CLI aktiviert oder deaktiviert werden soll.
Um APC mit atoum zu verwenden, müssen Sie apc.enabled
und apc.enable_cli
auf 1
setzen, andernfalls wird es für die PHP-CLI-Version, die von atoum verwendet wird, nicht aktiviert.
Bei der Verwendung von Atoum- und Mocking-Objekten kommt es manchmal zu Segfaults, die von PHP ausgehen. Diese Segfaults werden durch XDebug in der Version vor 2.1.0 verursacht, das in einigen Fällen Probleme bei der Verarbeitung von Reflektion hat. Um die aktuelle Version von XDebug zu überprüfen, können Sie php -v
ausführen. Um dieses Problem zu beheben, müssen Sie XDebug auf die neueste stabile Version aktualisieren. Wenn Sie XDebug auf Ihrem System nicht aktualisieren können, können Sie die Erweiterung trotzdem deaktivieren, um Segfaults zu vermeiden. Um sicherzustellen, dass XDebug erfolgreich aktualisiert oder deaktiviert wurde, können Sie php -v
ausführen. Wenn Sie mit der Aktualisierung oder Deaktivierung von XDebug fertig sind, führen Sie php atoum.phar --test-it
aus, um sicherzustellen, dass alle Segfaults behoben sind und dass Atoum funktioniert.
Suchen Sie nach einer Roadmap?
Hier ist die laufende Arbeit,
Und was wird in den nächsten Veröffentlichungen kommen?
atoum wurde von Frédéric Hardy erstellt. Es wird nun von einer starken Gemeinschaft von Mitwirkenden geleitet. Sie finden sie in der Committer-Liste oder im Mitwirkenden-Team.
atoum wird unter der BSD-3-Clause-Lizenz veröffentlicht. Einzelheiten finden Sie in der mitgelieferten LICENSE-Datei.