2016-08-25 118 views
4

我給作曲家自動加載一些phpunit測試類的嘗試,我似乎無法得到它的工作。當我從命令行運行phpunit時,出現「PHP Fatal Error:Class ... not found」。作曲家phpunit psr-4自動載入類沒有找到

我會給我所有的結構和文件信息,所以希望有人會發現我出錯的地方。

結構(削減到相關的文件):

composer.json 
composer.lock 
phpunit.xml 
    vendor/ 
    tests/ 
     functional/ 
      BaseTestCase.php 
      HomepageTest.php 

composer.json

{ 
"require": { 
    "php": ">=5.5.0", 
    "slim/slim": "^3.1", 
    "slim/php-view": "^2.0", 
    "monolog/monolog": "^1.17" 
}, 
"require-dev": { 
    "phpunit/phpunit": ">=4.8 < 6.0" 
}, 
"autoload-dev": { 
    "psr-4": { 
     "Tests\\": "tests/" 
    } 
} 
} 

phpunit.xml

<?xml version="1.0" encoding="utf-8" ?> 
<phpunit colors="true" bootstrap="vendor/autoload.php"> 
    <testsuites> 
     <testsuite name="Initial tests"> 
      <directory>tests/</directory> 
     </testsuite> 
    </testsuites> 
</phpunit> 

測試/功能/ BaseTestCase.php

<?php 
namespace Tests\Functional; 

use Slim\App; 
use Slim\Http\Request; 
use Slim\Http\Response; 
use Slim\Http\Environment; 

class BaseTestCase extends \PHPUnit_Framework_TestCase 
{ 
    ... 

測試/功能/ HomepageTest.php

<?php 
namespace Tests\Functional; 

class HomepageTest extends BaseTestCase 
{ 
    ... 

我然後跑更新刷新自動加載文件

$ composer update 

Loading composer repositories with package information 
Updating dependencies (including require-dev) 
Nothing to install or update 
Writing lock file 
Generating autoload files 

然後我試圖運行PHPUnit並獲得一類未找到錯誤:

$ vendor/bin/phpunit 

PHP Fatal error: Class 'Tests\Functional\BaseTestCase' not found in <project-root>/tests/functional/HomepageTest.php on line 6 

只是爲了徹底,我試着以另一種方式刷新自動加載文件,以防萬一:

$ composer dump-autoload 

Generating autoload files 
[email protected]:~/clients/ctest/dev$ 

我還檢查了供應商/作曲家/ autoload_psr4.php以確保測試引用正在設置,它是。

... 
Tests\\' => array($baseDir . '/tests'), 
... 

我瘋狂Google搜索,但不知道我哪裏出錯了。

+2

嘗試將目錄名稱「功能」更改爲「功能」。 –

回答

5

命名空間目錄區分大小寫。你必須在文件夾重命名爲Functional

正如PSR-4 documentation說:

The subdirectory name MUST match the case of the sub-namespace names.

+0

愚蠢的錯誤:(很明顯,看不到樹林的木材,我想我不得不把這個問題當成愚蠢的紀念碑,謝謝! – Finglish

+0

@英國人請接受答案。 –

0

我也有類似的問題,但沒有語法問題。 只要我添加了第二個ClassTest(下面的ModelTwoTest.php),Fixtures.php類就自動裝載了。如果我刪除1個modelTest,則只有剩餘的ModelTest自動加載而無需Fixtures。奇怪的行爲。

src/ 
tests/ 
     Models/ 
      ModelOneTest.php 
      ModelTwoTest.php <--- 
     Fixtures/ 
      Fixtures.php