Das Problem
Um meine Codequalität zu verbessern, habe ich beschlossen, zu lernen, wie ich meinen Code mithilfe von Unit-Tests anstelle meiner mittelmäßig besten Testlösungen teste.
Ich habe mich entschieden, PHPUnit mit Composer für eine persönliche Bibliothek zu installieren, mit der ich gemeinsame Datenbankfunktionen erreichen kann. Zuerst hatte ich keine Konfigurationsdatei für PHPUnit und als ich Befehle ausführte wie:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Bitte beachten Sie, dass dies ein Terminalbefehl ist, daher habe ich die .php
Erweiterung nicht eingefügt. Der oben erwähnte GeneralStringFunctionsTest ist eigentlich eine GeneralStringFunctionsTest.php
Datei.
Die Ausgabe ist das, was ich erwartet habe:
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 erstellt, die phpunit.xml
in meinem Stammverzeichnis aufgerufen wurde, 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>
Wenn ich jetzt den Befehl ausführe:
phpunit
Ich erhalte folgende Ausgabe:
PHPUnit 4.5.0 von Sebastian Bergmann und Mitwirkenden.
Konfiguration aus /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml gelesen
Zeit: 16 ms, Speicher: 1,50 MB
Keine Tests ausgeführt!
Falls es hilfreich ist, sieht meine Verzeichnisstruktur wie folgt aus:
src -
Tests des Verzeichnisses der obersten Ebene (mit meinem gesamten Quellcode) - Verzeichnis des Verzeichnisses der obersten Ebene (mit allen meinen Tests, die genauso strukturiert sind wie mein Ordner src )
- Composer-Dateien von Drittanbietern
Ich habe auch die Composer JSON- und Lock-Datei sowie die PHPUNIT-XML-Datei in der obersten Ebene als Dateien.
Dinge, die ich versucht habe
- Ändern Sie das Verzeichnis in
phpunit.xml
zutests/GeneralStringFunctions
- Ändern Sie das Verzeichnis in
phpunit.xml
zu./tests
- Verschieben Sie die
phpunit.xml
Datei in dastests
Verzeichnis und ändern Sie dann das Verzeichnis./
anstelle vontests
. - Hinzufügen eines Suffix-Attributs zum Verzeichnis-Tag in
phpunit.xml
, um "Tests" als explizites Suffix anzugeben.
quelle
tests/GeneralStringFunctions/GeneralStringFunctionsTest
ein Ordner oder ein Dateiname?GeneralStringFunctionsTest.php
. In der Befehlszeilenschnittstelle habe ich die.php
Erweiterung nicht eingegeben, da sie ohne sie funktioniert hat.Test.php
nichtTest
in Ihrem Fall sein, aber Sie können dies weglassen, da diesTest.php
der Standardwert ist.phpunit.xml
?Antworten:
Für das, was es wert ist (zu spät zu sein), bin ich kürzlich darauf gestoßen, als ich ein neues Laravel 5.1-Projekt für eine einfache Website erstellt habe. Ich habe versucht, es zu debuggen und war verwirrt, als ich versuchte:
(mit einem Standardtest, der nur bestätigt, dass wahr ist, ist wahr)
und sah die Ausgabe
Was für mich das Problem war, hing mit meiner PHP-Installation zusammen - "phpunit" wurde global registriert und anders konfiguriert, während das mit der Laravel-Installation gelieferte phpunit genau richtig konfiguriert war und perfekt lief.
Das Update führt also die vom Hersteller konfigurierte PHPUNIT aus (aus demselben Stammverzeichnis wie app / und tests /):
Hoffe das hilft jemand anderem!
quelle
vendor/bin/phpunit
anstelle der globalenphpunit
Binärdatei verwendet. Ich bin sogar so weit gegangen, die globalephpunit
Binärdatei zu entfernen, damit ich nicht versehentlich denselben Fehler erneut mache - und sie ist seitdem nicht mehr aufgetaucht. Ich werde dies als akzeptierte Antwort markieren, da dies höchstwahrscheinlich der Grund ist../vendor/bin/phpunit
hat den Trick für mich auf einer neuen Laravel 5.4-Installation gemachtphpunit
alias
für./vendor/bin/phpunit
Ihre XML-Datei ist in Ordnung. Sie müssen jedoch sicherstellen, dass die PHP-Dateien 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.
Darüber hinaus muss jede Testmethode einen Namen haben, der mit "test" beginnt:
Hoffentlich hilft das!
quelle
--test-suffix=anything.php
, umVerwenden Sie unter Windows den folgenden Befehl am Terminal
das ist wenn der Befehl
gibt "Keine Tests ausgeführt!"
während auf dem Mac
Ich hoffe es hilft.
quelle
phpunit
auf Ihrem globalen Pfad kein Pfad befindet (Sie können überprüfen,phpunit --version
ob er ausgeführt wird, um festzustellen, ob er Ihren Erwartungen entspricht. Xampp installiert normalerweise eine PHPUNIT unter demselben PHP-Bin-Verzeichnis. Das war das Problem für mich.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 wollten. Die Lösung für mich bestand darin, in jedem Testfall Folgendes zu ersetzen:
mit:
quelle
Mir ist klar, dass das super alt ist, aber es ist mir auch passiert. Hoffentlich hilft das jemandem.
Mein Problem war, dass ich das '@' Symbol in / ** @test * / vergessen habe.
FALSCH:
RICHTIG:
quelle
@return void
nicht '@test', weshalb phpunit ihn nicht identifizieren konnte es als Test.Ich zog 10 Minuten lang an meinen Haaren, bevor ich mich entschied, --debug (übrigens ein guter Weg) zu verwenden, um die einfache Tatsache zu entdecken, dass der Dateiname die Namenskonvention nicht respektierte. Am Ende hatte ich ein zusätzliches "s" .
falsch
richtig
Ich hoffe, diese Notiz könnte jemandem helfen
quelle
Sie müssen es nur aus der Lieferantendatei aufrufen
vendor\bin\phpunit
Hinweis \ Nicht /quelle
Anstatt phpunit auszuführen
verwenden
Hersteller \ bin \ phpunit
quelle
Wenn Sie PHPSTORM verwenden, gehen Sie zu Einstellungen und dann zu
Test Frameworks
und klicken Sie auf + und wählen Sie
PHPUnit Local
dannUse Composer Auto Loader
Fügen Sie dies dann wie im Pfad zum Skriptfeld einC:\{YOUR PROJECT NAME}\vendor\autoload.php
OK klicken
HAPPY TESTING
quelle
Überprüfen Sie die Datei phpunit.xml und sehen Sie sich die Testsuiten an.
Meine Version von phpunit (2019) sucht nach Dateien, die enden (Suffix) * Test.php. Stellen Sie also sicher, dass alle Testdateien richtig benannt sind (Beispiel: BookTest.php ist korrekt, BookTests.php ist nicht korrekt, BookTestCase.php ist nicht korrekt).
quelle
Haben Sie Ihrer phpunit.xml-Datei eine Testsuite hinzugefügt?
Sie können dort mehrere Verzeichnisse hinzufügen.
quelle
Time: 28 ms, Memory: 1.50Mb No tests executed!
Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!
. Es funktioniert definitiv, wenn ich es manuell referenziere, es mag es aus irgendeinem Grund nicht, aus der Konfigurationsdatei zu laden :(Die Verwendung von phpunit --debug hat mir gezeigt, welchen Test ich nicht ausgeführt habe
und ich denke, da das Verzeichnis mit der .htaccess-Authentifizierung geschützt war, konnte es nicht durchkommen, um die Seite zu besuchen
Die Lösung für mich bestand darin, diesen Test durchzuführen (oder höchstwahrscheinlich die .htaccess-Authentifizierung durchzuführen).
quelle
Das ist sehr spät, aber ich hoffe, es hilft jemandem.
Ich habe meine Tests unter Verwendung einer absoluten Referenz ausführen lassen. Ordnerstruktur [project / tests / test.php]
Meine Verzeichniszeile sah so aus ./tests/test.php
quelle
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 "Fensterseite" ausführen. :) :)
quelle
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 Kommentaren zum Blockieren von Dokumenten.
Durch das Zurücksetzen wurden die Tests von phpunit angezeigt und ordnungsgemäß ausgeführt.
quelle
Meins war ein bisschen lustig.
Als ich verwendet habe, habe
php artisan make:test
ich versehentlich .php so gesetzt, wie esProductRewardPointController.php
erstellt wurde,ProductRewardPointController.php.php
und phpunit hat es einfach ignoriert.Ich lösche einfach die zusätzliche .php und die Dinge wieder normal
quelle
Ich hatte die gleiche Ausgabe von Keine Tests ausgeführt! , gelöst, indem der Name der Datei und der Klassenname beibehalten werden.
quelle
Wenn Sie IDEs wie JetBrains PHPStorm verwenden , beachten Sie bitte Folgendes : Im
Run/Debug Configurations
FensterTest scope
mussdirectory
das Verzeichnis so eingestellt sein, dass es auf das Verzeichnis verweist , in dem sich Ihrtests
Ordner befindet.Ich habe nur eine halbe Stunde gebraucht, um herauszufinden, dass ich vergessen habe, das Verzeichnis festzulegen. Sie können global verwenden
phpunit.phar
, solange Sie den Testbereich und das Verzeichnis korrekt eingestellt haben. Die IDE übernimmt andere Aufgaben für Sie.quelle
Kam zu spät zur Party, aber diese Informationen können anderen helfen.
Die oben genannten Lösungen haben bei mir nicht funktioniert. Ab Laravel 7.x führt PHPUnit standardmäßig nur PHP-Dateien aus, denen das Suffix "Test.php" angehängt ist. Wenn Sie beispielsweise einen Test erstellen,
CreateUser
funktioniert die Benennung nicht, während die BenennungCreateUserTest
funktioniert.Um die Einschränkung zu überwinden, gehen Sie zu
phpunit.xml
und ändern Sie dassuffix
Attribut vondirectory
Elementen:Dadurch wird PHPUnit angewiesen, alle Dateien mit der
.php
Erweiterung aus Verzeichnissen auszuführen . Hinweis zum Löschen des App-Cache nach dem Updatephpunit.xml
:Weitere Informationen zur PHPUnit XML-Konfiguration finden Sie hier: https://phpunit.de/manual/6.5/en/appendixes.configuration.html
quelle
Den Funktionsnamen in der Testdatei muss entweder ein Präfix vorangestellt werden,
test
oder es sollte vor der Funktion ein Kommentar hinzugefügt werdenStellen Sie sicher, dass dies nicht der Fall ist
weil das nicht funktioniert. Nach dem Schrägstrich müssen zwei Sternchen vorhanden sein, nicht eines.
quelle
Die Verwendung der de cmd-Konsole hat dieses Problem behoben, indem der Test für den eingegebenen Pfad bestanden wurde
Ich habe keinen anderen Weg gefunden, es zu tun. Auf diese Weise funktioniert es nicht
Ich hoffe das war hilfreich für jemanden
quelle