Le problème
Pour améliorer ma qualité de code, j'ai décidé d'essayer d'apprendre à tester mon code à l'aide de tests unitaires 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'exécutais des commandes comme:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Veuillez noter qu'il s'agit d'une commande de terminal, je n'ai donc pas inclus l' .php
extension. Le GeneralStringFunctionsTest mentionné ci-dessus est en fait un GeneralStringFunctionsTest.php
fichier.
La sortie est ce que j'attendais:
Temps: 31 ms, Mémoire: 2.75Mb
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é ce qui suit 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 j'exécute la commande:
phpunit
J'obtiens la sortie suivante:
PHPUnit 4.5.0 par Sebastian Bergmann et contributeurs.
Configuration lue depuis /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Temps: 16 ms, Mémoire: 1.50Mb
Aucun test exécuté!
Au cas où cela serait utile, ma structure de répertoires est la suivante:
src -
Tests du répertoire de premier niveau (avec tout mon code source) - Répertoire de niveau supérieur (avec tous mes tests, structuré de la même manière que mon dossier src )
fournisseur - Fichiers tiers du compositeur
J'ai aussi le fichier composer json et lock, ainsi que le fichier xml phpunit au niveau supérieur en tant que fichiers.
Les choses que j'ai essayées
- Modification du répertoire
phpunit.xml
pourtests/GeneralStringFunctions
- Modification du répertoire
phpunit.xml
pour./tests
- Déplacement du
phpunit.xml
fichier vers letests
répertoire, puis modification du répertoire en lieu et./
place detests
. - Ajout d'un attribut de suffixe à la balise d'annuaire
phpunit.xml
pour spécifier "Tests" comme suffixe explicite.
la source
tests/GeneralStringFunctions/GeneralStringFunctionsTest
un dossier ou un nom de fichier?GeneralStringFunctionsTest.php
. Dans l'interface de ligne de commande, je n'ai pas entré l'.php
extension car cela fonctionnait sans elle.Test.php
plutôt queTest
dans votre cas, mais cependant, vous êtes libre de l'omettre puisqueTest.php
c'est la valeur par défaut.phpunit.xml
?Réponses:
Pour ce que ça vaut (être en retard), je suis tombé dessus récemment alors que je faisais un nouveau projet Laravel 5.1 pour un simple site Web. J'ai essayé de le déboguer et j'étais confus quand j'ai essayé:
(qui a un test par défaut qui affirme simplement que vrai est vrai)
et vu la sortie
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 parfaitement configuré et fonctionnait parfaitement.
Ainsi, le correctif exécute le phpunit configuré du fournisseur (à partir du même répertoire racine que app / et tests /):
J'espère que cela aide quelqu'un d'autre!
la source
vendor/bin/phpunit
place duphpunit
binaire global . Je suis même allé jusqu'à supprimer lephpunit
binaire global pour ne plus faire accidentellement la même erreur - et cela n'a pas surgi depuis. Je marquerai ceci comme la réponse acceptée, car c'est probablement la raison../vendor/bin/phpunit
fait l'affaire pour moi sur une nouvelle installation de laravel 5.4phpunit
alias
pour./vendor/bin/phpunit
Votre fichier XML est très bien tel quel. Cependant, vous devez vous assurer que les fichiers PHP de votre
tests/
dossier sont nommés comme suit:tests / Test.php <--- Notez les
tests "T" majuscules / utilisateur 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 ça t'as aidé!
la source
--test-suffix=anything.php
pour remplacerSous Windows, utilisez la commande suivante sur le terminal
c'est si la commande
renvoie "Aucun test exécuté!"
sur Mac
J'espère que cela aide.
la source
phpunit
de chemin global (vous pouvez le vérifier en exécutant quelque chose commephpunit --version
et voir si cela correspond à ce que vous attendez. Xampp installe généralement un phpunit dans le même répertoire bin php. C'était le problème pour moi.J'ai eu le même problème après PHPUnit sur nos machines virtuelles mises à jour vers la version 6. Même --debug et --verbose n'ont rien dit d'utile, juste "Aucun test exécuté". En fin de compte, il s'est avéré que les classes et les espaces de noms avaient été modifiés dans la nouvelle version et qu'il ne voulait tout simplement pas exécuter les fichiers contenant des références à d'anciennes classes. Le correctif 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 {...}
la source
Je me rends compte que c'est super vieux, mais ça m'est 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() { ... }
la source
@return void
et ne contient pas '@test', raison pour laquelle phpunit n'a pas pu identifier cela comme un test.Je me suis tiré les cheveux pendant 10 minutes avant de décider d'utiliser --debug (bon chemin d'ailleurs) pour découvrir le simple fait que le nom de fichier ne respectait pas la convention de dénomination , j'avais un "s" supplémentaire à la fin .
faux
droite
j'espère que cette note pourra aider quelqu'un
la source
Vous avez juste besoin de l'appeler à partir du fichier du fournisseur
vendor\bin\phpunit
Avis \ Pas /la source
Au lieu d'exécuter phpunit
utilisation
fournisseur \ bin \ phpunit
la source
si vous utilisez PHPSTORM, allez dans Paramètres puis allez
Test Frameworks
et cliquez sur + et choisissez
PHPUnit Local
puisUse Composer Auto Loader
puis collez-le comme dans le champ Chemin d'accès au scriptC:\{YOUR PROJECT NAME}\vendor\autoload.php
cliquez sur OK
HAPPY TESTING
la source
Vérifiez le fichier phpunit.xml , regardez à l'intérieur des suites de tests.
Ma version de phpunit (2019) recherche des fichiers se terminant par (suffixe) * Test.php. Donc, assurez-vous que tous les fichiers de test sont nommés correctement (ex.: BookTest.php est correct, BookTests.php ne l'est pas, BookTestCase.php ne l'est pas).
la source
Je suis arrivé en retard à la fête, mais cette information peut aider les autres.
Les solutions ci-dessus n'ont pas fonctionné pour moi. Depuis Laravel 7.x, par défaut, PHPUnit n'exécute que les fichiers PHP qui sont suffixés avec "Test.php". Par exemple, si vous créez un test, le nommer
CreateUser
ne fonctionnera pas, tandis que le nommerCreateUserTest
fonctionnera.Pour surmonter la limitation, accédez à
phpunit.xml
et modifiez l'suffix
attribut desdirectory
éléments:... <testsuite name="Unit"> <!-- modify suffix --> <directory suffix=".php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <!-- modify suffix --> <directory suffix=".php">./tests/Feature</directory> </testsuite> ...
Cela demandera à PHPUnit d'exécuter tous les fichiers avec l'
.php
extension des répertoires. Remarque pour vider le cache de l'application après la mise à jourphpunit.xml
:Des informations supplémentaires sur la configuration XML de PHPUnit sont disponibles ici: https://phpunit.de/manual/6.5/en/appendixes.configuration.html
la source
Avez-vous ajouté une suite de tests à votre fichier phpunit.xml?
<phpunit> <testsuite name="app1" > <directory>./</directory> </testsuite> </phpunit>
Vous pouvez y ajouter plusieurs répertoires.
la source
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!
. Cela fonctionne certainement lorsque je le référence manuellement, cela n'aime tout simplement pas le chargement à partir du fichier de configuration pour une raison quelconque :(Pour moi, utiliser phpunit --debug m'a montré quel test il n'exécutait pas, à l'intérieur, j'avais
$this->visit('/') ->see('Laravel');
et je pense que comme le répertoire était protégé par l'authentification .htaccess, il ne pouvait pas accéder à la page
La solution pour moi était de passer ce test (ou très probablement de supprimer l'authentification .htaccess)
la source
C'est très tard mais j'espère que cela aide quelqu'un.
J'ai fait exécuter mes tests en utilisant une référence absolue. structure des dossiers [projet / tests / test.php]
ma ligne de répertoire ressemblait à ceci ./tests/test.php
la source
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 vagrant et non du "côté windows". :)
la source
J'ai eu le problème de ne pas exécuter de tests, même lorsque les choses étaient bien configurées.
La cause était que l'espace de noms n'était pas la première commande du fichier, c'était après quelques commentaires de doc-block.
le retour a fait en sorte que phpunit voit les tests et s'exécute correctement.
la source
Le mien était un peu drôle.
Quand j'ai utilisé,
php artisan make:test
j'ai accidentellement mis .php commeProductRewardPointController.php
qui a crééProductRewardPointController.php.php
et phpunit l'a simplement ignoré.Je viens de supprimer le .php supplémentaire et les choses reviennent à la normale
la source
J'ai eu le même problème de Aucun test exécuté! , résolu en gardant le même nom de fichier et le nom de classe .
la source
Si vous utilisez des IDE comme JetBrains PHPStorm , veuillez également noter que: dans la
Run/Debug Configurations
fenêtre, leTest scope
doit être définidirectory
et pointer ce répertoire vers l'emplacement de votretests
dossier.Il m'a fallu une demi-heure pour comprendre que j'avais oublié de définir le répertoire. Vous pouvez utiliser global
phpunit.phar
tant que vous définissez correctement la portée du test et le répertoire, l'EDI gérera d'autres choses pour vous.la source
Les noms de fonction dans le fichier de test doivent être précédés d'un préfixe
test
ou d'un commentaire doit être ajouté avant la fonction/** @test */
Assurez-vous que ce n'est pas
/* @test */
parce que cela ne fonctionne pas. il doit y avoir deux astérisques après la barre oblique pas un.
la source
l'utilisation de la console de cmd a résolu ce problème en passant le test de chemin entéré réalisé
Je n'ai pas trouvé d'autre moyen de faire ça ne marche pas de cette façon
J'espère que cela a été utile pour quelqu'un
la source