J'essaie d'utiliser PHPUnit dans un projet PHP. Voici la structure de mon projet (les fichiers sont en italique)
contrôleurs
tests
vendeur
composer.json
Mes dossiers:
composer.json
{
"require-dev": {
"phpunit/phpunit":"5.5.4"
}
}
Pages.php
<?php
namespace controllers
class Pages
{
public function render()
{
return 'Hello World';
}
}
pagesTest.php
<?php
class PagesTest extends PHPUnit_Framework_TestCase
{
public function testRenderReturnsHelloWorld()
{
$pages = new \controllers\Pages();
$expected = 'Hello Word';
$this->assertEquals($expected, $pages->render());
}
}
Quand j'ouvre la ligne de commande j'écris:
C:\xampp\htdocs\PHPUnitTestProject\vendor\bin>phpunit ../../tests/PagesTest.php
Je reçois ce message d'erreur: PHP Fatal error: Class 'controllers\Pages' not found in C:\xampp\htdocs\PHPUnitTestProject\tests\pagesTest.php on line 7
C'est un problème de chemin. Je pense que c'est parce qu'il recherche C:\xampp\htdocs\PHPUnitTestProject\vendor\bin\controllers\Pages()
qui n'existe pas.
Cela devrait être C:\xampp\htdocs\PHPUnitTestProject\controllers\Pages()
Vous devez pointer sur la classe testée, donc dans pagesTest.php, ajoutez un require:
require __DIR__ . "/../controllers/Pages.php";
Ou si vous utilisez le chargement automatique, vous pouvez initialiser le chargement automatique dans votre ligne de commande
phpunit --bootstrap src/autoload.php
Ou vous pouvez configurer un fichier de configuration phpunit.xml comme dans cet exemple (à partir de la page PHPUnit à laquelle j'ai lié ci-dessus):
<phpunit bootstrap="src/autoload.php">
<testsuites>
<testsuite name="money">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Ce que vous utilisez ensuite avec l'option --configuration.
Appelez phpunit
à partir du dossier racine:
$ cd C:\xampp\htdocs\PHPUnitTestProject\
$ vendor\bin\phpunit tests/PagesTest.php