Phpunit-致命错误:require():无法打开required';PHP\Invoker.PHP';

Phpunit-致命错误:require():无法打开required';PHP\Invoker.PHP';,php,phpunit,Php,Phpunit,我根据一本书练习非常基本的单元测试,代码运行良好。但每次测试失败时,我都会出现以下错误,这会阻止显示测试的完整失败消息: C:\wamp\www\project-phpunit>phpunit PHPUnit 3.7.38 by Sebastian Bergmann. Configuration read from C:\wamp\www\project-phpunit\phpunit.xml ..... Time: 156 ms, Memory: 2.25Mb OK (5 tes

我根据一本书练习非常基本的单元测试,代码运行良好。但每次测试失败时,我都会出现以下错误,这会阻止显示测试的完整失败消息:

C:\wamp\www\project-phpunit>phpunit
PHPUnit 3.7.38 by Sebastian Bergmann.

Configuration read from C:\wamp\www\project-phpunit\phpunit.xml

.....

Time: 156 ms, Memory: 2.25Mb

OK (5 tests, 5 assertions)

C:\wamp\www\project-phpunit>phpunit
PHPUnit 3.7.38 by Sebastian Bergmann.

Configuration read from C:\wamp\www\project-phpunit\phpunit.xml

....F.

Time: 109 ms, Memory: 2.25Mb

There was 1 failure:

1) CardTest::testIsInMatchingSet with data set #2 (Card, false, 'should not match')

    Warning: require(PHP\Invoker.php): failed to open stream: No such file or directory in C:\wamp\www\project-phpunit\test-bootstrap.php on line 5

    Call Stack:
        0.0000     127408   1. {main}() C:\phpunit\vendor\phpunit\phpunit\composer\bin\phpunit:0
        0.0000     333752   2. PHPUnit_TextUI_Command::main() C:\phpunit\vendor\phpunit\phpunit\composer\bin\phpunit:63
        0.0000     337152   3. PHPUnit_TextUI_Command->run() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:129
        0.0312    1643576   4. PHPUnit_TextUI_TestRunner->doRun() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:176
        0.1092    2224520   5. PHPUnit_TextUI_ResultPrinter->printResult() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\TestRunner.php:356
        0.1248    2224704   6. PHPUnit_TextUI_ResultPrinter->printFailures() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:163
        0.1248    2224832   7. PHPUnit_TextUI_ResultPrinter->printDefects() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:307
        0.1248    2225088   8. PHPUnit_TextUI_ResultPrinter->printDefect() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:225
        0.1404    2225560   9. PHPUnit_TextUI_ResultPrinter->printDefectTrace() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:238
        0.1404    2239120  10. PHPUnit_Util_Filter::getFilteredStacktrace() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:274
        0.1404    2239400  11. PHPUnit_Util_GlobalState::phpunitFiles() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\Filter.php:76
        0.2340    2322608  12. PHPUnit_Util_GlobalState::addDirectoryContainingClassToPHPUnitFilesList() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:389
        0.2340    2322672  13. class_exists() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:410
        0.2340    2322856  14. spl_autoload_call() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:410
        0.2340    2322968  15. PHPUnit_Util_Fileloader::{closure:C:\wamp\www\project-phpunit\test-bootstrap.php:3-6}() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:0


    Fatal error: require(): Failed opening required 'PHP\Invoker.php' (include_path='C:\wamp\www\project-phpunit\src;C://phpunit//vendor;C:\wamp\www\project-phpunit\src;C://phpunit//vendor;C:\phpunit\vend
    or/phpunit/php-text-template;C:\phpunit\vendor/phpunit/phpunit-mock-objects;C:\phpunit\vendor/phpunit/php-timer;C:\phpunit\vendor/phpunit/php-token-stream;C:\phpunit\vendor/phpunit/php-file-iterator;C
    :\phpunit\vendor/phpunit/php-code-coverage;C:\phpunit\vendor/phpunit/phpunit;C:\phpunit\vendor/symfony/yaml;.;C:\php\pear') in C:\wamp\www\project-phpunit\test-bootstrap.php on line 5

    Call Stack:
        0.0000     127408   1. {main}() C:\phpunit\vendor\phpunit\phpunit\composer\bin\phpunit:0
        0.0000     333752   2. PHPUnit_TextUI_Command::main() C:\phpunit\vendor\phpunit\phpunit\composer\bin\phpunit:63
        0.0000     337152   3. PHPUnit_TextUI_Command->run() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:129
        0.0312    1643576   4. PHPUnit_TextUI_TestRunner->doRun() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\Command.php:176
        0.1092    2224520   5. PHPUnit_TextUI_ResultPrinter->printResult() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\TestRunner.php:356
        0.1248    2224704   6. PHPUnit_TextUI_ResultPrinter->printFailures() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:163
        0.1248    2224832   7. PHPUnit_TextUI_ResultPrinter->printDefects() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:307
        0.1248    2225088   8. PHPUnit_TextUI_ResultPrinter->printDefect() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:225
        0.1404    2225560   9. PHPUnit_TextUI_ResultPrinter->printDefectTrace() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:238
        0.1404    2239120  10. PHPUnit_Util_Filter::getFilteredStacktrace() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\TextUI\ResultPrinter.php:274
        0.1404    2239400  11. PHPUnit_Util_GlobalState::phpunitFiles() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\Filter.php:76
        0.2340    2322608  12. PHPUnit_Util_GlobalState::addDirectoryContainingClassToPHPUnitFilesList() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:389
        0.2340    2322672  13. class_exists() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:410
        0.2340    2322856  14. spl_autoload_call() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:410
        0.2340    2322968  15. PHPUnit_Util_Fileloader::{closure:C:\wamp\www\project-phpunit\test-bootstrap.php:3-6}() C:\phpunit\vendor\phpunit\phpunit\PHPUnit\Util\GlobalState.php:0

PHP_Invoker是PHPUnit的可选依赖项。您不应手动包含
PHP/Invoker.PHP
(或任何包的源文件)。

此PHP\u Invoker错误的根本原因似乎是自动加载程序

当PHPunit运行时,它会使用class_exists函数检查某些类是否存在。默认情况下,此函数尝试使用自动加载程序加载类

如果autoloader实现在找不到类时失败,那么您将遇到此错误

下面是导致故障的自动加载器实现的示例。如果找不到该文件,require_once将失败

function AutoLoader($className)
{
  $file = __DIR__ . DIRECTORY_SEPARATOR . str_replace('\\',DIRECTORY_SEPARATOR,$className) . ".php";
  require_once($file);
}
如果您有自己的自动加载器,一种解决方案是添加一个文件,请检查:

function AutoLoader($className)
{
  $file = __DIR__ . DIRECTORY_SEPARATOR . str_replace('\\',DIRECTORY_SEPARATOR,$className) . ".php";
  if(file_exists($file)
    require_once($file);
}

参考:YII框架问题跟踪器中的讨论:

要求将与文件执行所在的目录相关。由于您的文件是
C:\wamp\www\project phpunit\test bootstrap.php
,而您的需求是
require(php\Invoker.php)
,因此它应该在
C:\wamp\www\project phpunit\php\Invoker.php
中查找该文件。这个位置存在吗?…你能告诉我们require('PHP/Invoker.PHP')maybe吗?PHP/Invoker.PHP是否存在?这个位置不存在,我找不到任何PHP/Invoker.PHP。可能是指PHP-Invoker()。但是这本书没有安装这个软件包。