2017-02-14 6 views
6

Я играю с PHP 7 и PHPUnit 6. Здесь есть тест, который я написал:PHP Фатальная ошибка: Class 'PHPUnit Framework TestCase' не найден с помощью PHPUnit 6 и PHP 7.0

<?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()); 
    } 
} 

Когда я попытался чтобы запустить этот тест, я получил следующее сообщение об ошибке:

PHP Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /home/.../.../Test/ObserverTest.php on line 9 

я установил PHPUnit с композитором, вот мое содержание composer.json файла:

{ 
    "require": { 
     "phpunit/phpunit": "^6.0" 
    }, 
    "autoload": { 
     "psr-4": {"DesignPatterns\\": "src/"} 
    } 
} 

Согласно PHPUnit 6 documentation, ваши тесты теперь должны расширять PHPUnit \ Framework \ TestCase вместо PHPUnit_Framework_TestCase.

Я знаю, что это не проблема с автозагрузкой. На самом деле, если я заменю PHPUnit \ Framework \ TestCase на PHPUnit_Framework_TestCase, он работает нормально, но мне было интересно, почему этот синтаксис не работает.

Я пробовал некоторые исследования в google, stackoverflow и репозитории github PHPUnit, но ничего не нашел.

Я с нетерпением жду ваших ответов,

EDIT

Это как организованы мои файлы:

src/ 
├── DataMapper 
│   ├── StorageAdapter.php 
│   ├── UserMapper.php 
│   └── User.php 
├── Observer 
│   ├── UserObserver.php 
│   └── User.php 
Test/ 
├── DataMapperTest.php 
└── ObserverTest.php 
+0

зайдите в поставщика и посмотрите, есть ли phpunit или нет –

+0

тестовый файл находится в папке src? если да, у него должен быть суффикс DesignPatterns в пространстве имен? – Matteo

+0

Привет, да, phpunit есть. – romaind

ответ

7

Я нашел ответ:

Я excuting мой тест с помощью этой командной строки:

phpunit Test/ObserverTest.php 

PHPUnit устанавливается глобально на моем компьютере, но это 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 

И синтаксис PHPUnit \ Framework \ TestCase работает только с PHPUnit 6

Теперь, если я бегу php vendor/bin/phpunit Test/ObserverTest.php, он отлично работает ...