Class 'sample\question2\Hello' 未找到 composer 和 phpunit
Class 'sample\question2\Hello' not found with composer and phpunit
我使用 composer 和 phpunit 但出现错误 "Class not found"。
目录结构:
- php_sample/sample/question/
- php_sample/sample/question/Hello.php
- php_sample/sample/question/测试/HelloTest.php
并创建了composer.json
{
"require-dev": {
"phpunit/phpunit": "4.5.*"
}
}
我是这样安装composer的
$ curl -sS https://getcomposer.org/installer | php
$ ./composer.phar update
$ ./composer.phar install --dev
Hello.php是这样的
<?php
namespace sample\question;
class Hello
{
public function hello()
{
return 'Hello, world';
}
}
?>
test/HelloTest.php是这样的.
<?php
namespace sample\question\tests;
use sample\question\Hello;
class HelloTest extends \PHPUnit_Framework_TestCase
{
/**
* @var Hello
*/
public $SUT;
/**
* @test
*/
public function canPrint()
{
$this->assertThat($this->SUT->hello(), $this->equalTo('Hello, world'));
}
protected function setUp()
{
$this->SUT = new Hello;
}
}
然后,我 运行 这个脚本发生了错误。
$ vendor/bin/phpunit --bootstrap vendor/autoload.php tests/HelloTest.php
PHP Fatal error: Class 'sample\question\Hello' not found in /Users/foobar/work/php_sample/sample/question/tests/HelloTest.php on line 32
如果你能回答我就太好了
您正确地使用 --bootstrap vendor/autoload.php
引导 PHPUnit 以通过 Composer 生成的自动加载器自动加载文件,但是
您的 composer.json
文件缺少 autoload
和 autoload-dev
部分。
{
"require-dev": {
"phpunit/phpunit": "4.5.*"
}
"autoload": {
"psr-4": {"sample\question\": "php_sample/sample/question/"}
}
"autoload-dev": {
"psr-4": {"sample\question\tests\": "php_sample/sample/question/tests/"}
}
}
然后 re-dump/re-generate Composer Autoloader 和 composer dump-autoload
。
旁注:我不确定文件夹结构是否真的有效..
也许值得将您的项目文件夹布局更改为:
project/src
project/tests
project/src/sample/question/
project/tests/sample/question/
然后变成
"autoload": {
"psr-4": {"sample\question\": "src/"}
}
"autoload-dev": {
"psr-4": {"sample\question\tests\": "tests/"}
}
我使用 composer 和 phpunit 但出现错误 "Class not found"。
目录结构:
- php_sample/sample/question/
- php_sample/sample/question/Hello.php
- php_sample/sample/question/测试/HelloTest.php
并创建了composer.json
{
"require-dev": {
"phpunit/phpunit": "4.5.*"
}
}
我是这样安装composer的
$ curl -sS https://getcomposer.org/installer | php
$ ./composer.phar update
$ ./composer.phar install --dev
Hello.php是这样的
<?php
namespace sample\question;
class Hello
{
public function hello()
{
return 'Hello, world';
}
}
?>
test/HelloTest.php是这样的.
<?php
namespace sample\question\tests;
use sample\question\Hello;
class HelloTest extends \PHPUnit_Framework_TestCase
{
/**
* @var Hello
*/
public $SUT;
/**
* @test
*/
public function canPrint()
{
$this->assertThat($this->SUT->hello(), $this->equalTo('Hello, world'));
}
protected function setUp()
{
$this->SUT = new Hello;
}
}
然后,我 运行 这个脚本发生了错误。
$ vendor/bin/phpunit --bootstrap vendor/autoload.php tests/HelloTest.php
PHP Fatal error: Class 'sample\question\Hello' not found in /Users/foobar/work/php_sample/sample/question/tests/HelloTest.php on line 32
如果你能回答我就太好了
您正确地使用 --bootstrap vendor/autoload.php
引导 PHPUnit 以通过 Composer 生成的自动加载器自动加载文件,但是
您的 composer.json
文件缺少 autoload
和 autoload-dev
部分。
{
"require-dev": {
"phpunit/phpunit": "4.5.*"
}
"autoload": {
"psr-4": {"sample\question\": "php_sample/sample/question/"}
}
"autoload-dev": {
"psr-4": {"sample\question\tests\": "php_sample/sample/question/tests/"}
}
}
然后 re-dump/re-generate Composer Autoloader 和 composer dump-autoload
。
旁注:我不确定文件夹结构是否真的有效..
也许值得将您的项目文件夹布局更改为:
project/src
project/tests
project/src/sample/question/
project/tests/sample/question/
然后变成
"autoload": {
"psr-4": {"sample\question\": "src/"}
}
"autoload-dev": {
"psr-4": {"sample\question\tests\": "tests/"}
}