489 Stimmen

Wie führt man eine einzelne Testmethode mit PHPUnit aus?

Ich kämpfe damit, eine einzelne Testmethode mit dem Namen testSaveAndDrop in der Datei escalation/EscalationGroupTest.php mit phpunit auszuführen. Ich habe folgende Kombinationen ausprobiert:

phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=escalation/EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest.php::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=EscalationGroupTest::testSaveAndDrop
phpunit EscalationGroupTest escalation/EscalationGroupTest.php --filter=testSaveAndDrop

In jedem Fall werden alle Testmethoden in der Datei escalation/EscalationGroupTest.php ausgeführt. Wie wähle ich stattdessen nur EINE Methode aus?

Der Klassenname ist EscalationGroupTest und die Version von phpunit ist 3.2.8.

676voto

Alex Punkte 38247

Der folgende Befehl führt den Test für eine einzelne Methode aus:

phpunit --filter testSaveAndDrop EscalationGroupTest escalation/EscalationGroupTest.php

phpunit --filter methodName ClassName path/to/file.php

Für neuere Versionen von phpunit lautet der Befehl einfach:

phpunit --filter methodName path/to/file.php

288voto

iamtankist Punkte 3304

Ich bevorzuge es, den Test in der Annotation zu markieren als

/**
 * @group failing
 * Tests the api edit form
 */
public function testEditAction()

Dann führe es aus mit

phpunit --group failing

Es ist nicht nötig den vollständigen Pfad in der Befehlszeile anzugeben, aber du musst daran denken, dies vor dem Commit zu entfernen, um den Code nicht zu überladen.

Du kannst auch mehrere Gruppen für einen einzelnen Test spezifizieren

/**
  * @group failing
  * @group bug2204 
  */
public function testSomethingElse()
{
}

137voto

Mahmoud Zalt Punkte 27664

Hier ist die allgemeinere Antwort:

Wenn Sie sicher sind, dass der Methodenname eindeutig ist, können Sie nur nach Methodennamen filtern (das funktioniert für mich)

phpunit --filter {TestMethodName}

Es ist jedoch sicherer, auch den Dateipfad/die Referenz anzugeben

phpunit --filter {TestMethodName} {FilePath}

Beispiel:

phpunit --filter testSaveAndDrop referenz/zu/escalation/EscalationGroupTest.php

Kleiner Hinweis: Ich habe bemerkt, dass wenn ich eine Funktion mit dem Namen testSave und eine andere Funktion mit dem Namen testSaveAndDrop habe, die Verwendung des Befehls phpunit --filter testSave auch testSaveAndDrop und jede andere Funktion, die mit testSave* beginnt, ausgeführt wird, es ist seltsam!!

60voto

Farid Movsumov Punkte 11508

Der folgende Befehl führt den genau testSaveAndDrop Test aus.

phpunit --filter '/::testSaveAndDrop$/' escalation/EscalationGroupTest.php

58voto

Vinay Kaithwas Punkte 1135
  • Führen Sie dies im Stammverzeichnis Ihres Projekts aus, das ich im Laravel-Stammverzeichnis verwende.

vendor/bin/phpunit --filter 'Ihr Methodenname'

Beispiel mit benutzerdefiniertem Methodennamen.

 /** @test //Initialisieren Sie dies für benutzerdefinierten Methodennamen, ohne das Test-Schlüsselwort
  *  
  * Testfall für das Dashboard, wenn der Benutzer nicht angemeldet ist, wird er zur Anmeldeseite weitergeleitet
  */
  public function nur_eingeloggte_benutzer_dashboard_sehen()
  {
    $response = $this->get('/dashboard')
                   ->assertRedirect('/login');
  }

Beispiel mit Test-Schlüsselwort

/**
* Ein grundlegendes Testbeispiel.
*
* @return void
*/
 public function testBasicTest()
 {
  $this->assertTrue(true);
 }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X