2017-02-11 15 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/" 
    } 
} 
} 

次のように書かれた私のアクメ\ 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

これは機能します!ありがとう!しかし、なぜそれが動作し、 'コンポーザーのダンプ自動ロード'がうまくいかないのだろうか? @mcstuffins –

+0

これはうまくいきました。 '-o'をやりましたか?作曲家のファイルを最適化するだけです。私はそれがうまくいくことがうれしいです。この問題が発生したときのほとんどの時間は、作曲家とそれが自動ロードする方法のためです。 – McStuffins

答えて

1

一般的な答え:最適化されたオートローダーをダンプしても問題は解決し、最適化されていない場合でも、ディレクトリやファイル名のどこかにタイプミスがあります。

最適化されたオートローダーをダンプすると、PSR-4またはPSR-0オートローディングのディレクトリで見つかったすべてのファイルがスキャンされ、見つかったすべてのクラス名と対応するファイル名の配列が書き込まれます。あなたのパスにタイプミスをした場合、この配列をダンプすると、タイプミスに関係なくクラス名が正しいファイルパスに接続されます。

一部のファイルシステム(大部分はLinux)は大文字と小文字を区別し、その他のもの(Windows)はPSR-4とPSR-0に関連しており、大文字と小文字を区別しないファイル大文字と小文字の区別はありません。

あなたの質問の問題は、あなたが与えた情報の中に、あなたが何か間違っていたという明確なヒントが含まれていないことです。ただし、コードを再入力しても、エラーは発生していない可能性があります。元のコードにはファイルパスに入力ミスがあります。それをもう一度チェックしてください。

+0

私はWindowsシステム上でファイル名がファイル内の実際のクラス名と同じではないケースで開発している間に数回捕まえられました。 –

関連する問題