web-dev-qa-db-de.com

PHPUnit - 'Keine Tests ausgeführt', wenn Konfigurationsdatei verwendet wird

Das Problem

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.

Dinge, die ich ausprobiert habe

  • Ändern des Verzeichnisses in phpunit.xml in tests/GeneralStringFunctions
  • Ändern des Verzeichnisses in phpunit.xml in ./tests
  • Verschieben der phpunit.xml-Datei in das Verzeichnis tests und Ändern des Verzeichnisses in ./ anstelle von tests.
  • Hinzufügen eines Suffixattributs zum Verzeichnis-Tag in phpunit.xml, um "Tests" als explizites Suffix anzugeben.
61
Muyiwa Olu

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!

140
RoboBear

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!

76
Lionel

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 {...}
9
igors

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.

9
Ndong Akwo

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 ein
  • C:\{YOUR PROJECT NAME}\vendor\autoload.php
  • oK klicken
  • HAPPY TESTING
2
Tahseen Alaa

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()
{
    ...
}
2
AlmostPitt

Sie müssen es nur aus der Lieferantendatei aufrufen 

vendor\bin\phpunit Hinweis\nicht / 

2
ZyMaWy B bOy

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.

1
Aine

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

1
chebaby

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. :)

0
Kapalua

Ich hatte die gleiche Ausgabe von Keine Tests ausgeführt!, gelöst durch Beibehalten des gleichen Namens von Datei und Klasse Name.

0
Asif

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).

0
relipse

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.

0
pgee70

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

0
Codebender

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

0