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.
phpunit.xml
en tests/GeneralStringFunctions
phpunit.xml
en ./tests
phpunit.xml
dans le répertoire tests
, puis modification du répertoire en ./
au lieu de tests
.phpunit.xml
pour spécifier "Tests" comme suffixe explicite.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!
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!
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 {...}
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.
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 scriptC:\{YOUR PROJECT NAME}\vendor\autoload.php
HAPPY TESTING
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()
{
...
}
Vous avez juste besoin de l'appeler depuis le fichier du fournisseur
vendor\bin\phpunit
Notice\Not /
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.
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
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". :)
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.
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)
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.
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
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