web-dev-qa-db-fra.com

PHPUnit - 'Aucun test exécuté' lors de l'utilisation du fichier de configuration

Le problème

Pour améliorer ma qualité de code, j'ai décidé d'essayer d'apprendre à tester mon code en utilisant le test unitaire au lieu de mes solutions de test médiocres au mieux.

J'ai décidé d'installer PHPUnit en utilisant composer pour une bibliothèque personnelle qui me permet de réaliser des fonctions de base de données communes. Au début, je n'avais pas de fichier de configuration pour PHPUnit et quand j'ai exécuté des commandes telles que:

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

Veuillez noter qu'il s'agit d'une commande de terminal. Je n'ai donc pas inclus l'extension .php. Le GeneralStringFunctionsTest mentionné ci-dessus est en fait un fichier GeneralStringFunctionsTest.php.

Le résultat est ce que j'attendais:

Temps: 31 ms, mémoire: 2,75 Mo

OK (1 test, 1 assertion)

J'ai ensuite essayé d'utiliser un fichier de configuration pour charger automatiquement la suite de tests au lieu d'avoir à taper manuellement le fichier à chaque fois. J'ai créé un fichier appelé phpunit.xml dans mon répertoire racine et entré les informations suivantes dans le fichier: http://Pastebin.com/0j0L4WBD :

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

Maintenant, quand je lance la commande:

phpunit

Je reçois la sortie suivante:

PHPUnit 4.5.0 de Sebastian Bergmann et des contributeurs.

Configuration lue à partir de /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml

Temps: 16 ms, mémoire: 1,50 Mo

Aucun test exécuté!

Au cas où cela serait utile, la structure de mon répertoire est la suivante:
src - Répertoire de premier niveau (avec tout mon code source)
tests - Répertoire de niveau supérieur (avec tous mes tests, structuré de la même manière que mon dossier src)
vendor - Fichiers tiers du compositeur 

J'ai aussi le compositeur json et le fichier de verrouillage, ainsi que le fichier xml phpunit au niveau supérieur en tant que fichiers.

Choses que j'ai essayées

  • Changer le répertoire dans phpunit.xml en tests/GeneralStringFunctions
  • Changer le répertoire dans phpunit.xml en ./tests
  • Déplacement du fichier phpunit.xml dans le répertoire tests, puis modification du répertoire en ./ au lieu de tests.
  • Ajout d'un attribut suffixe à la balise directory dans phpunit.xml pour spécifier "Tests" comme suffixe explicite.
61
Muyiwa Olu

Pour ce que ça vaut (être en retard), je l’ai rencontré récemment alors que je réalisais un nouveau projet Laravel 5.1 pour un site Web simple. J'ai essayé de le déboguer et j'étais confus quand j'ai essayé:

php artisan make:test homeTest

(qui a un test par défaut qui affirme que true est true)

et a vu la sortie

No tests executed!

Ce que le problème a fini par être pour moi était lié à mon installation PHP - "phpunit" était globalement enregistré et configuré différemment, alors que le phpunit fourni avec l'installation de Laravel était configuré exactement et parfaitement.

Donc, le correctif exécute la phpunit configurée par le fournisseur (à partir du même répertoire racine que app/et tests /):

./vendor/bin/phpunit

J'espère que ça aide quelqu'un d'autre!

140
RoboBear

Votre fichier XML est correct tel quel. Cependant, vous devez vous assurer que les fichiers PHP de votre dossier tests/ sont nommés comme suit:

tests / Test.php <--- Notez la lettre majuscule "T"
tests/user Test.php
tests/fooBar Test.php
etc.

Les noms de fichiers doivent se terminer par "Test.php" . C’est ce que PHPUnit recherche dans les répertoires.

De plus, chaque méthode de test doit avoir un nom commençant par "test":

public function testFooBar()
{
    // Your test code
}

J'espère que cela pourra aider!

76
Lionel

J'ai eu le même problème après que PHPUnit sur nos machines virtuelles ait été mis à jour vers la version 6. Même --debug et --verbose ne disent rien d’utile, juste "Aucun test exécuté". En fin de compte, il s'est avéré que les classes et les espaces de noms ont été modifiés dans la nouvelle version et il ne voulait tout simplement pas exécuter les fichiers contenant des références à d'anciennes classes. La solution pour moi était juste de remplacer dans chaque cas de test ceci:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}

avec:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}
9
igors

Sous Windows, utilisez la commande suivante sur le terminal

.\vendor\bin\phpunit

c'est si la commande 

phpunit

renvoie "Aucun test exécuté!"

alors que sur Mac

./vendor/bin/phpunit

J'espère que ça aide.

9
Ndong Akwo

si vous utilisezPHPSTORMallez dans Paramètres puis allez à 

  • Test Frameworks

    et cliquez sur + et choisissez

  • PHPUnit Local puis 
  • Use Composer Auto Loader puis collez ceci comme dans le chemin du champ de script
  • C:\{YOUR PROJECT NAME}\vendor\autoload.php
  • cliquez sur OK
  • HAPPY TESTING
2
Tahseen Alaa

Je réalise que c'est super vieux, mais ça m'est juste arrivé aussi. J'espère que cela aidera quelqu'un. 

Mon problème était que j'avais oublié le symbole '@' dans/** @test * /

FAUX:

/** test */
function a_thread_can_be_deleted()
{
    ...
}

DROITE:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}
2
AlmostPitt

Vous avez juste besoin de l'appeler depuis le fichier du fournisseur 

vendor\bin\phpunit Notice\Not / 

2
ZyMaWy B bOy

Avez-vous ajouté une suite de tests à votre fichier phpunit.xml?

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

Vous pouvez ajouter plusieurs répertoires ici.

1
Aine

J'ai tiré les cheveux pendant 10 minutes avant de décider d'utiliser --debug (bon chemin à suivre) pour découvrir le simple fait que le nom du fichier ne fonctionne pas respecter la convention de dénomination} _, j'ai eu un extra "s" à la fin.

faux

CreateAdminTests

droite

CreateAdminTest

espérons que cette note pourrait aider pour quelqu'un

1
chebaby

Un peu sur le côté peut-être, mais si vous utilisez (comme moi) Laravel dans Vagrant, assurez-vous que vous exécutez phpunit à l'intérieur de la boîte vagabonde et non du "côté fenêtre". :)

0
Kapalua

J'ai eu le même problème de Aucun test exécuté!, résolu en gardant le même nom de fichier et classe nom.

0
Asif

Pour moi, utiliser phpunit --debug m’a montré quel test n’était pas en cours d’exécution,

$this->visit('/')
         ->see('Laravel');

et je pense que le répertoire étant protégé par une authentification .htaccess, il n'a pas pu passer à travers pour visiter la page.

La solution pour moi était de faire ce test (ou probablement avec une authentification .htaccess)

0
relipse

J'ai eu la question de ne pas exécuter de tests, même lorsque tout était bien réglé.

La cause était que l'espace de nom n'était pas la première commande du fichier, c'était après quelques commentaires doc-block.

cela a amené phpunit à voir les tests et à s'exécuter correctement.

0
pgee70

C'est très tard, mais j'espère que cela aidera quelqu'un.

Je dois exécuter mes tests en utilisant une référence absolue . structure de dossier [projet/tests/test.php]

ma ligne de répertoire ressemblait à ceci ./tests/test.php

0
Codebender

Le mien était un peu drôle.

Quand j'ai utilisé php artisan make:test, j'ai accidentellement mis .php like ProductRewardPointController.php qui a créé ProductRewardPointController.php.php et phpunit l'a simplement ignoré.

Je supprime simplement l'extra .php et tout redevient normal

0
Apit John Ismail