Um meine Codequalität zu verbessern, habe ich mich entschlossen zu lernen, wie ich meinen Code mithilfe von Unit Testing anstelle meiner mittelmäßigen Testlösungen teste.
Ich entschied mich für die Installation von PHPUnit mit Composer für eine persönliche Bibliothek, die es mir ermöglicht, gängige Datenbankfunktionen zu erreichen. Zuerst hatte ich keine Konfigurationsdatei für PHPUnit und als ich Befehle ausgeführt habe wie:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Bitte beachten Sie, dass dies ein Terminalbefehl ist, daher habe ich die Erweiterung .php
nicht hinzugefügt. Der oben genannte GeneralStringFunctionsTest ist eigentlich eine GeneralStringFunctionsTest.php
-Datei.
Die Ausgabe ist was ich erwartet hatte:
Zeit: 31 ms, Speicher: 2,75 MB
OK (1 Test, 1 Behauptung)
Ich habe dann versucht, eine Konfigurationsdatei zu verwenden, um die Testsuite automatisch zu laden, anstatt die Datei jedes Mal manuell eingeben zu müssen. Ich habe eine Datei mit dem Namen phpunit.xml
in meinem Stammverzeichnis erstellt und Folgendes in die Datei eingegeben: http://Pastebin.com/0j0L4WBD :
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Nun, wenn ich den Befehl ausführen:
phpunit
Ich erhalte folgende Ausgabe:
PHPUnit 4.5.0 von Sebastian Bergmann und Mitwirkenden.
Konfigurationslese aus /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Zeit: 16 ms, Speicher: 1,50 MB
Keine Tests ausgeführt
Falls es hilfreich ist, ist meine Verzeichnisstruktur wie folgt:
src - Verzeichnis der obersten Ebene (mit meinem gesamten Quellcode)
tests - Verzeichnis der obersten Ebene (mit all meinen Tests strukturiert wie mein Ordner src)
Hersteller - Dateien von Drittanbietern
Ich habe auch den Komponisten Json und Lock-Datei sowie die Phpunit-XML-Datei in der obersten Ebene als Dateien.
phpunit.xml
in tests/GeneralStringFunctions
phpunit.xml
in ./tests
phpunit.xml
-Datei in das Verzeichnis tests
und Ändern des Verzeichnisses in ./
anstelle von tests
.phpunit.xml
, um "Tests" als explizites Suffix anzugeben.Für das, was es wert ist (spät zu sein), bin ich kürzlich darauf gestoßen, als ich ein neues Laravel 5.1-Projekt für eine einfache Website erstellte. Ich habe versucht, es zu debuggen und war verwirrt, als ich versuchte:
php artisan make:test homeTest
(was einen Standardtest hat, der bestätigt, dass wahr wahr ist)
und sah die Ausgabe
No tests executed!
Das Problem, das am Ende für mich endete, war mit meiner PHP -Installation verbunden - "phpunit" wurde global registriert und anders konfiguriert, während die mit der Laravel-Installation gelieferte Phpunit genau richtig konfiguriert war und perfekt lief.
Das Update führt also die konfigurierte Phpunit des Herstellers aus (im selben Stammverzeichnis wie app/und tests /):
./vendor/bin/phpunit
Hoffe das hilft jemand anderem!
Ihre XML-Datei ist in Ordnung. Sie müssen jedoch sicherstellen, dass die Dateien PHP in Ihrem tests/
-Ordner wie folgt benannt sind:
tests / Test.php <--- Beachten Sie die Großbuchstaben "T"
tests/user Test.php
tests/fooBar Test.php
usw.
Die Dateinamen müssen mit "Test.php" enden. Dies ist, was PHPUnit in Verzeichnissen sucht.
Außerdem muss jede Testmethode einen Namen haben, der mit "test" beginnt:
public function testFooBar()
{
// Your test code
}
Hoffentlich hilft das!
Ich hatte das gleiche Problem, nachdem PHPUnit auf unseren virtuellen Maschinen auf Version 6 aktualisiert wurde. Sogar --debug und --verbose sagten nichts Nützliches, nur "Keine Tests ausgeführt". Am Ende stellte sich heraus, dass Klassen und Namespaces in der neuen Version geändert wurden und die Dateien, die Verweise auf alte Klassen enthielten, einfach nicht ausgeführt werden sollten. Das Update für mich bestand darin, in jedem Testfall Folgendes zu ersetzen:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
mit:
use PHPUnit\Framework\TestCase;
class MyTestCase extends TestCase {...}
Verwenden Sie unter Windows den folgenden Befehl auf dem Terminal
.\vendor\bin\phpunit
das ist wenn der Befehl
phpunit
gibt zurück "Keine Tests ausgeführt!"
während auf dem Mac
./vendor/bin/phpunit
Ich hoffe es hilft.
wenn SiePHPSTORMverwenden, gehen Sie zu Settings (Einstellungen) und dann weiter
Test Frameworks
und klicken Sie auf + und wählen Sie
PHPUnit Local
dann Use Composer Auto Loader
fügen Sie dann den Pfad in das Skriptfeld einC:\{YOUR PROJECT NAME}\vendor\autoload.php
HAPPY TESTING
Mir ist klar, dass das super alt ist, aber mir ist es auch passiert. Hoffentlich hilft das jemandem.
Mein Problem war, dass ich das "@" -Symbol in/** @test */vergessen habe.
FALSCH:
/** test */
function a_thread_can_be_deleted()
{
...
}
RECHT:
/** @test */
function a_thread_can_be_deleted()
{
...
}
Sie müssen es nur aus der Lieferantendatei aufrufen
vendor\bin\phpunit
Hinweis\nicht /
Haben Sie Ihrer phpunit.xml-Datei eine Testsuite hinzugefügt?
<phpunit>
<testsuite name="app1" >
<directory>./</directory>
</testsuite>
</phpunit>
Sie können dort mehrere Verzeichnisse hinzufügen.
Ich zog mich 10 Minuten lang an den Haaren, bevor ich beschloss, --debug zu verwenden (guter Weg, übrigens zu gehen), um die einfache Tatsache zu entdecken, dass der Dateiname die Namenskonvention nicht respektierte , die ich hatte ein zusätzliches "s" am Ende.
falsch
CreateAdminTests
recht
CreateAdminTest
ich hoffe, dieser Hinweis könnte für jemanden helfen
Ein bisschen nebenbei vielleicht, aber wenn Sie (wie ich) Laravel in Vagrant verwenden, stellen Sie sicher, dass Sie Phpunit in der Vagrant-Box und nicht auf der "Windows-Seite" ausführen. :)
Ich hatte die gleiche Ausgabe von Keine Tests ausgeführt!, gelöst durch Beibehalten des gleichen Namens von Datei und Klasse Name.
Bei Verwendung von phpunit --debug wurde mir angezeigt, welchen Test es nicht ausführte. Ich hatte innen
$this->visit('/')
->see('Laravel');
ich denke, da das Verzeichnis mit der .htaccess-Authentifizierung geschützt wurde, konnte es die Seite nicht besuchen
Die Lösung für mich bestand darin, diesen Test durchzuführen (oder höchstwahrscheinlich die .htaccess-Authentifizierung).
Ich hatte das Problem, dass keine Tests ausgeführt wurden, selbst wenn die Dinge gut eingerichtet waren.
Die Ursache war, dass der Namespace nicht der erste Befehl der Datei war, sondern nach einigen Doc-Block-Kommentaren.
das Zurücksetzen führte dazu, dass phpunit die Tests sah und ordnungsgemäß ausgeführt wurde.
Das ist sehr spät, aber ich hoffe es hilft jemandem.
Ich habe meine Tests mit einer absoluten Referenz ausgeführt. Ordnerstruktur [Projekt/Tests/Test.php]
meine Verzeichniszeile sah so aus ./tests/test.php
Meins war ein bisschen lustig.
Bei der Verwendung von php artisan make:test
habe ich versehentlich .php wie ProductRewardPointController.php
eingegeben, wodurch ProductRewardPointController.php.php
und phpunit erstellt wurden.
Ich lösche nur die zusätzlichen .php und die Dinge wieder normal