Class 未找到 phpunit
Class is not found phpunit
我写了php单元测试。我使用以下命令 运行 它:
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
我尝试了这些问题的几种解决方案:
- Autoloading classes in PHPUnit using Composer and autoload.php
但没有任何效果。可能是什么问题,我将如何解决它?谢谢!
我的目录结构:
- php单位.dev/src/Acme/SumFinder.php
- php单位.dev/tests/AcmeTests/SumFinderTest.php
- php单位.dev/composer.json
- php单位.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 堆栈,如果它可以帮助解决我的问题。
作为一般性回答:如果转储优化的自动加载器解决了您的问题,但不优化它仍然显示它,则您的目录或文件名中某处有错字。
转储优化的自动加载器将扫描它在 PSR-4 或 PSR-0 自动加载提到的目录中找到的所有文件,并写入一个数组,其中包含找到的所有 class 个名称及其对应的文件名。如果您在路径中输入错误,转储此数组会将 class 名称连接到正确的文件路径,而不管任何输入错误。
请注意,某些文件系统(主要是 Linux)区分大小写,而其他文件系统则不区分大小写(Windows),并且大小写与 PSR-4 和 PSR-0 相关,这将导致自动加载可以在 case-insensitive 文件系统上工作,但不能在 case-sensitive 文件系统上工作。
您问题的问题在于,您提供的信息中 none 明显暗示您做错了什么。但是,您的代码可能有 re-typed 而没有出错,而您的原始代码在文件路径中仍然有拼写错误。仔细检查一下。
我写了php单元测试。我使用以下命令 运行 它:
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
我尝试了这些问题的几种解决方案:
- Autoloading classes in PHPUnit using Composer and autoload.php
但没有任何效果。可能是什么问题,我将如何解决它?谢谢!
我的目录结构:
- php单位.dev/src/Acme/SumFinder.php
- php单位.dev/tests/AcmeTests/SumFinderTest.php
- php单位.dev/composer.json
- php单位.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 堆栈,如果它可以帮助解决我的问题。
作为一般性回答:如果转储优化的自动加载器解决了您的问题,但不优化它仍然显示它,则您的目录或文件名中某处有错字。
转储优化的自动加载器将扫描它在 PSR-4 或 PSR-0 自动加载提到的目录中找到的所有文件,并写入一个数组,其中包含找到的所有 class 个名称及其对应的文件名。如果您在路径中输入错误,转储此数组会将 class 名称连接到正确的文件路径,而不管任何输入错误。
请注意,某些文件系统(主要是 Linux)区分大小写,而其他文件系统则不区分大小写(Windows),并且大小写与 PSR-4 和 PSR-0 相关,这将导致自动加载可以在 case-insensitive 文件系统上工作,但不能在 case-sensitive 文件系统上工作。
您问题的问题在于,您提供的信息中 none 明显暗示您做错了什么。但是,您的代码可能有 re-typed 而没有出错,而您的原始代码在文件路径中仍然有拼写错误。仔细检查一下。