2017-02-11 234 views
1

我寫了phpunit測試。類未找到phpunit

C:\Program Files (x86)\Ampps\www\phpunit.dev\vendor\bin>phpunit -c ../../phpunit.xml

但最終有此錯誤:

PHP Fatal error: Class 'Acme\SumFinder' not found in C:\Program Files (x86)\Ampps\www\phpunit.dev\tests\AcmeTests\SumFinderTest.php on line 15

我從這些問題,嘗試了幾種解決方案:

但沒有任何工作。可能是什麼問題,我將如何解決它?謝謝!

我的目錄結構:

  • phpunit.dev/src/Acme/SumFinder.php
  • phpunit.dev/tests/AcmeTests/SumFinderTest.php
  • phpunit.dev/composer.json
  • phpunit.dev/phpunit.xml

我composer.json這樣寫的:

{ 
"require-dev": { 
"phpunit/phpunit": "3.7.*" 
}, 
"autoload": { 
    "psr-4": { 
    "Acme\\": "./src/" 
} 
}, 
"autoload-dev": { 
    "psr-4": { 
    "AcmeTests\\": "./tests/" 
    } 
} 
} 

我的Acme \ SumFinder.php這樣寫的:

<?php 
namespace Acme; 
class SumFinder { 
    private $inputArray; 
    function __construct($inputArray = null) { ... } 
    function findSum() { ... } 
    function compareArrays() { ... } 
} 
?> 

我AcmeTests \ SumFinderTest.php:

<?php 
    namespace AcmeTests; 
    use Acme\SumFinder; 

    class SumFinderTest extends \PHPUnit_Framework_TestCase 
    function testFindSum() { ... } 
    function testCompareArrays() { ... } 
?> 

我phpunit.xml配置文件:

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

我正在使用Windows 10和AMPPS堆棧,如果它可以幫助解決我的問題。

+2

嘗試在cmd或powershell中使用此命令'composer -o dump-autoload' – McStuffins

+0

它的工作原理!謝謝!但我想知道它爲什麼會起作用,而'composer dump-autoload'不起作用? @mcstuffins –

+0

它應該已經工作。你做了'-o'。它所做的就是優化你的作曲家文件。我很高興它的工作。大多數情況下,當這個問題發生時,這將是由於作曲家和它自動加載的方式。 – McStuffins

回答

1

作爲一般答案:如果轉儲優化的自動加載器解決了您的問題,而不是優化它仍然顯示它,您的目錄或文件名稱中有一個錯字。

轉儲優化的自動加載器將掃描它在PSR-4或PSR-0自動加載所述的目錄中找到的所有文件,並寫入一個包含所有找到的類名及其對應文件名的數組。如果你在路徑中輸入了錯字,那麼拋出這個數組會將類名連接到正確的文件路徑,而不管任何輸入錯誤。請注意,某些文件系統(主要是Linux)區分大小寫,其他文件系統不是(Windows),並且這些情況與PSR-4和PSR-0相關,這會導致自動加載在大小寫不敏感的文件系統,但不區分大小寫。

與您的問題的問題是,您提供的任何信息都沒有包含明顯的提示,說明您做錯了什麼。但是,您可能重新輸入了代碼,但沒有發生錯誤,而原始代碼仍然在文件路徑中存在拼寫錯誤。仔細檢查一下。

+0

在Windows系統上開發時,我遇到過幾次文件名與文件中的實際類名不一致的情況。 –