2017-02-14 46 views
6

我玩用PHP 7和6的PHPUnit這是我寫的測試:PHP致命錯誤:類 'PHPUnit的框架 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,它工作得很好,但我想知道爲什麼這個語法不起作用。

我嘗試了一些谷歌,stackoverflow和PHPUnit的github存儲庫的研究,但找不到任何東西。

我期待着您的回答,

編輯

這就是我的文件組織:

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的\框架\測試用例只使用PHPUnit現在工作6

,如果我跑php vendor/bin/phpunit Test/ObserverTest.php,它完美的工作...

相關問題