J'ai un projet avec la structure suivante :
- src + Guitar.php + Type.php + ToString.php - tests + GuitarTest.php composer.json
Voici comment je définis le chargement automatique psr-4 dans composer.json :
"autoload": { "psr-4": { "Shop\Guitar\": "src/" } }
Voici mon Guitar.php :
<?php namespace Shop\Guitar; require_once __DIR__ . '/../vendor/autoload.php'; use Shop\Guitar\Type; class Guitar { public function __construct(public readonly string $serialNumber, public readonly Type $type) { } }
Voici mon ToString.php :
<?php namespace Shop\Guitar; require_once __DIR__ . '/../vendor/autoload.php'; interface ToString { public function toString(): string; }
Voici mon Type.php :
<?php namespace Shop\Guitar; require_once __DIR__ . '/../vendor/autoload.php'; enum Type implements ToString { case ACOUSTIC; case ELECTRIC; public function toString(): string { return match($this) { self::ACOUSTIC => 'Acoustic', self::ELECTRIC => 'Electric', }; } }
Voici mon GuitarTest.php :
<?php require_once __DIR__ . '/../vendor/autoload.php'; use PHPUnit\Framework\TestCase; use Shop\Guitar\Guitar; use Shop\Guitar\Type; final class InventoryTest extends TestCase { public function testGuitarConstructor(): void { $guitar = new Guitar('foo', Type::ELECTRIC); } }
Mais lorsque j'exécute le test, j'obtiens l'erreur suivante :
Error: Class "Shop\Guitar\Guitar" not found
Quel est le problème ? Comment résoudre?
Ceci est juste une question sur le chargeur automatique Composer en configuration PSR-4.
require_once
les appels ne le seront pas. Il s'agit d'un chargeur automatique et les fichiers de classe ne doivent pas nécessiter de chargeur automatique.En cas de doute, testez la configuration de votre autoloader.
Prochaines étapes :
Supprimez ces
require_once
appels, ils ne font que vous distraire et gêner le dépannage. La configuration du chargement automatique est valide ou non valide. Cela nécessite plus de maintenance si vous répartissez les points d'inclusion sur différents fichiers, mais ce n'est absolument pas nécessaire.Réorganisez vos
测试
modules pour introduire des tests de configuration de l'autoloader car vous rencontrez des problèmes :Déplacez le contenu de
tests
移至tests/unit
et fournissez un répertoire dédié aux tests unitaires.Créé
tests/php
子文件夹并在其中创建autoloading.php
文件。该文件夹用于 PHP 测试,即直接使用 PHP 执行它们(例如phptests/php/autoloading.php
). Contenu du fichier :Référence :
Exécutez le test de configuration du chargeur automatique pour vérifier si le fichier peut être chargé
(Il ne peut rien imprimer, mais il peut imprimer n'importe quoi. L'important est qu'il s'exécute, et non un fichier introuvable ou un type d'erreur similaire.
Si vous parvenez à exécuter des fichiers PHP de cette façon, liez-les à votre configuration Composer. Cela vous permet de tester la configuration du chargeur automatique.
Ajoutez un nouveau script à votre
composer.json
configuration :Référence :
et testez-le :
(Cela ne donne pas de résultat, ici j'ai ajouté quelques avertissements pour montrer à quoi cela ressemble)
Cela exécutera le nouveau test de configuration de chargement automatique et activera les assertions en mode avertissement. Autrement dit, si une fonction ***_exists() renvoie false, vous verrez une erreur. Cela signifie que l'interface/l'énumération/la classe ne peut pas être chargée.
Vous pouvez passer
-dassert.exception=0
更改为-dassert.exception=1
(0
-> 1代码>)。然后测试将以非零代码退出(状态255
pour les exceptions non détectées).C'est ce que tu veux, will
-dassert.exception=0
更改为-dassert.exception=1
并再次保存composer.json
.Vous pouvez ensuite tester votre autoloader à l'aide de n'importe quelle commande Composer qui vide l'autoloader :
作曲家转储自动加载
作曲家安装
作曲家更新
Bon test.
Un test approprié, peut-être aussi vérifier si phpunit est toujours en cours d'exécution :
Testez à nouveau, lorsque vous trouvez le coupable et que tout est revenu à la normale, vous pouvez exécuter tous les tests en utilisant un seul script d'écriture.
Common est un script avec le mot
test
:Et tu n’as pas besoin d’écrire
composer run-script test
,只需composer test
tout le temps ça suffit :(Dans cet exemple de sortie, je n'ai pas configuré les tests phpunit, mais vous voyez l'idée)
Alors, de quel genre de test s'agit-il ? Eh bien, j'appelle cela un test de configuration, c'est juste une vérification rapide où vous pouvez vérifier certaines choses PHP. N'ajoutez pas beaucoup de tests de ce type et gardez votre plan de test petit. Vous pouvez l'utiliser pour résoudre les problèmes que vous rencontrez lors de la configuration de votre projet. Conservez-le jusqu'à un an et si vous restez sans erreur, vous pouvez envisager de le supprimer.
Cependant, cet exemple montre comment rapprocher certains chèques de l'emplacement configuré et les lier ensemble. S'il y a un état de sortie différent de zéro, Composer fera échouer l'ensemble du processus.
De plus, vous pouvez ajouter une description à chaque script d'écrivain afin qu'un message s'affiche :
(Voir : Description personnalisée - Documentation du script du compositeur)