我已经编写了phpunit测试。我使用以下命令运行它:
C:Program Files (x86)Amppswwwphpunit.devvendorbin>phpunit -c ../../phpunit.xml
但最终出现了这个错误:
PHP Fatal error: Class 'AcmeSumFinder' not found in C:Program Files (x86)Amppswwwphpunit.devtestsAcmeTestsSumFinderTest.php on line 15
我已经尝试了几个解决这些问题的方法:
- 类';sample\question2\Hello';找不到composer和phpunit
- 使用Composer和autoload.php在PHPUnit中自动加载类
但什么都不起作用。问题出在哪里?我该如何解决?谢谢
我的目录结构:
- 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 AcmeSumFinder;
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自动加载所提到的目录中找到的所有文件,并写入一个包含找到的所有类名及其相应文件名的数组。如果您在路径中拼写错误,则转储此数组将把类名连接到正确的文件路径,而不考虑任何拼写错误。
请注意,有些文件系统(主要是Linux)区分大小写,而另一些则不区分大小写(Windows),并且大小写与PSR-4和PSR-0相关,这将导致自动加载以在不区分大小大小写的文件系统上工作,但在区分大小写的文件系统上不工作。
你的问题是,你提供的信息中没有一条明显暗示你做错了什么。然而,您可能已经重新键入了代码,但没有犯错误,而您的原始代码在文件路径中仍然有拼写错误。仔细检查一下。