Je joue avec php 7 et phpunit 6. Voici le test que j'ai écrit:
<?php declare(strict_types=1);
namespace Test;
use DesignPatterns\Observer\User;
use DesignPatterns\Observer\UserObserver;
use PHPUnit\Framework\TestCase;
class ObserverTest extends TestCase
{
public function testChangeInUserLeadsToUserObserverBeingNotified()
{
$observer = new UserObserver();
$user = new User();
$user->attach($observer);
$user->changeEmail('[email protected]');
$this->assertCount(1, $observer->getChangedUsers());
}
}
Lorsque j'ai essayé d'exécuter ce test, j'ai reçu le message d'erreur suivant:
PHP Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /home/.../.../Test/ObserverTest.php on line 9
J'ai installé PHPUnit avec composer, voici le contenu de mon fichier composer.json:
{
"require": {
"phpunit/phpunit": "^6.0"
},
"autoload": {
"psr-4": {"DesignPatterns\\": "src/"}
}
}
Selon documentation PHPUnit 6 , vos tests sont désormais censés étendre PHPUnit\Framework\TestCase au lieu de PHPUnit_Framework_TestCase.
Je sais que ce n'est pas un problème avec le chargement automatique. En fait, si je remplace PHPUnit\Framework\TestCase par PHPUnit_Framework_TestCase, cela fonctionne très bien, mais je me demandais pourquoi cette syntaxe ne fonctionnait pas.
J'ai essayé des recherches sur google, stackoverflow et le dépôt github de PHPUnit, mais je n'ai rien trouvé.
J'attends vos réponses avec impatience,
[~ # ~] modifier [~ # ~]
Voici comment mes fichiers sont organisés:
src/
├── DataMapper
│ ├── StorageAdapter.php
│ ├── UserMapper.php
│ └── User.php
├── Observer
│ ├── UserObserver.php
│ └── User.php
Test/
├── DataMapperTest.php
└── ObserverTest.php
J'ai trouvé la réponse:
J'échangeais mon test avec cette ligne de commande:
phpunit Test/ObserverTest.php
PHPUnit est installé globalement sur mon ordinateur, mais c'est la version 5.1.3:
phpunit -v
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
Runtime: PHP 7.0.13-0ubuntu0.16.04.1 with Xdebug 2.4.0
Configuration: /home/.../.../DesignPatterns/phpunit.xml
Et la syntaxe PHPUnit\Framework\TestCase ne fonctionne qu'avec PHPUnit 6
Maintenant, si je lance php vendor/bin/phpunit Test/ObserverTest.php
, ça marche parfaitement ...
Dans mon cas, j'avais une version différente de phpunit plus tôt dans mon chemin dans le répertoire/Applications/MAMP/Library/bin. Après avoir créé un lien symbolique vers la version installée globalement (7.5.1) au lieu de 5.1.3, cela a corrigé l'erreur pour moi:
cd /Applications/MAMP/Library/bin
mv phpunit phpunit_bak
ln -s /usr/local/bin/phpunit phpunit