2017-02-11 3 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

Это работает! Благодаря! Но мне интересно, почему это работает, а 'comper dump-autoload' не работает? @mcstuffins –

+0

он должен был сработать. Вы делали «-o». Все, что он делает, это оптимизация вашего файла композитора. Я рад, что он работает. В большинстве случаев, когда возникает эта проблема, это происходит из-за композитора и способа загрузки. – McStuffins

ответ

1

В качестве общего ответа: Если сброс оптимизированного автозагрузчика решает вашу проблему, и не оптимизируя его, он все же показывает, что у вас есть опечатка где-то в ваших каталогах или именах файлов.

Сбрасывание оптимизированного автозагрузчика будет проверять все найденные файлы в каталоге, указанном для автозагрузки PSR-4 или PSR-0, и написать массив со всеми найденными именами классов и их соответствующими именами файлов. Если вы сделали опечатку на своем пути, сброс этого массива приведет к подключению имени класса к правильному пути к файлу, независимо от каких-либо опечаток.

Обратите внимание, что некоторые файловые системы (в основном Linux) чувствительны к регистру, а другие нет (Windows), и эти случаи имеют отношение к PSR-4 и PSR-0, что приведет к тому, что автозагрузка будет работать с файлом без учета регистра систем, но не на чувствительных к регистру.

Проблема с вашим вопросом заключается в том, что ни одна из предоставленных вами сведений не содержит OBVIOUS-намека на то, что вы делаете что-то неправильно. Однако, возможно, вы повторно набрали свой код и НЕ сделали ошибку, в то время как ваш исходный код все еще имеет опечатку в пути к файлу. Дважды проверьте это.

+0

Я был пойман пару раз при разработке в системе Windows, когда имена файлов не совпадают с фактическим именем класса внутри файла. –

Смежные вопросы