我有以下目录结构
oop
- src
- FetchTask.php
- tests
- FetchTaskTest.php
- vendor
- composer.json
- composer.lock
- phpunit.xml// FetchTask.php
<?php
namespace PHPUnitTuts;
class FetchTask
{
}// FetchTaskTest.php
<?php
use PHPUnitTuts\FetchTask;
class Fetch_Test extends AbstractTest
{
public function setUp()
{
$this->fetch = new FetchTask;
}
public function testStoresListOfAssets($value='')
{
$this->classHasStaticAttribute('paths', 'FetchTask');
}
}// composer.json
{
"name": "raheel/code",
"require-dev": {
"phpunit/phpunit": "^5.5",
"phpunit/php-code-coverage": "^4",
"squizlabs/php_codesniffer": "2.*"
},
"autoload": {
"psr-0": {
"PHPUnitTuts\\": "src/"
}
},
}// phpunit.xml
<phpunit bootstrap="./vendor/autoload.php">
<testsuites>
<testsuite name="oop">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>现在,当我运行$ vendor/bin/phpunit时,它说
PHP致命错误:在第9行的/home/ Fatal /code/oop/test/FetchTask.php中找不到'PHPUnitTuts\FetchTask‘类
请告诉我做错了什么。谢谢
发布于 2016-08-19 18:30:57
你混合了PSR-0和PSR-4的概念。
使用PSR-0
将src/FetchTask.php移动到src/PHPUnitTuts/FetchTask.php。
使用PSR-4
变化
"psr-0": {
"PHPUnitTuts\\": "src/"
}至
"psr-4": {
"PHPUnitTuts\\": "src"
}建议结构
.
├── composer.json
├── phpunit.xml.dist
├── src
│ └── FetchTask.php
└── test
└── FetchTaskTest.phpcomposer.json
{
"name": "raheel/code",
"require-dev": {
"phpunit/phpunit": "^5.5",
"phpunit/php-code-coverage": "^4",
"squizlabs/php_codesniffer": "2.*"
},
"autoload": {
"psr-4": {
"PHPUnitTuts\\": "src"
}
}
}phpunit.xml.dist
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="oop">
<directory>test</directory>
</testsuite>
</testsuites>
</phpunit>src/FetchTask.php
<?php
namespace PHPUnitTuts;
class FetchTask extends \PHPUnit_Framework_TestCase
{
public static $paths = [];
}test/FetchTaskTest.php
<?php
namespace PHPUnitTuts;
class FetchTaskTest extends \PHPUnit_Framework_TestCase
{
public function setUp()
{
$this->fetch = new FetchTask();
}
public function testStoresListOfAssets()
{
$this->assertClassHasStaticAttribute('paths', FetchTask::class);
// or
$this->assertClassHasStaticAttribute('paths', get_class($this->fetch));
// or
$this->assertClassHasStaticAttribute('paths', 'PHPUnitTuts\\FetchTask');
}
}发布于 2016-08-19 15:35:07
我想测试的声明缺失了,您可以将它放在autoload dev块中:
{
"name": "raheel/code",
"require-dev": {
"phpunit/phpunit": "^5.5",
"phpunit/php-code-coverage": "^4",
"squizlabs/php_codesniffer": "2.*"
},
"autoload": {
"psr-0": {
"PHPUnitTuts\\": "src/"
}
},
"autoload-dev": {
"psr-0": {
"Tests\\PHPUnitTuts\\": "tests/"
}
},
}然后,您的测试应该驻留在Test命名空间中。
use Tests\PHPUnitTuts\FetchTask对于PSR-0,必须更改文件夹结构,在文件夹PHPUnitTuts中移动类:
oop
- src
- PHPUnitTuts/FetchTask.php
- tests
- PHPUnitTuts/FetchTaskTest.php
- vendor
- composer.json
- composer.lock
- phpunit.xml顺便说一下,PSR-0是不推荐的,为什么不使用PSR-4呢?
https://stackoverflow.com/questions/39041653
复制相似问题