首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于PSR-0的自动调理类

基于PSR-0的自动调理类
EN

Stack Overflow用户
提问于 2016-08-19 14:32:49
回答 2查看 102关注 0票数 1

我有以下目录结构

代码语言:javascript
复制
oop
 - src
   - FetchTask.php
 - tests
   - FetchTaskTest.php
 - vendor
 - composer.json
 - composer.lock
 - phpunit.xml

// FetchTask.php

代码语言:javascript
复制
<?php 

namespace PHPUnitTuts;

class FetchTask 
{

}

// FetchTaskTest.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
{
    "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

代码语言:javascript
复制
<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‘类

请告诉我做错了什么。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-19 18:30:57

你混合了PSR-0和PSR-4的概念。

使用PSR-0

src/FetchTask.php移动到src/PHPUnitTuts/FetchTask.php

使用PSR-4

变化

代码语言:javascript
复制
"psr-0": { 
    "PHPUnitTuts\\": "src/" 
}

代码语言:javascript
复制
"psr-4": { 
    "PHPUnitTuts\\": "src" 
}

建议结构

代码语言:javascript
复制
.
├── composer.json
├── phpunit.xml.dist
├── src
│   └── FetchTask.php
└── test
    └── FetchTaskTest.php

composer.json

代码语言:javascript
复制
{
    "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

代码语言:javascript
复制
<phpunit bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="oop">
             <directory>test</directory>
        </testsuite>
    </testsuites>
</phpunit>

src/FetchTask.php

代码语言:javascript
复制
<?php

namespace PHPUnitTuts;

class FetchTask extends \PHPUnit_Framework_TestCase
{
    public static $paths = [];
}

test/FetchTaskTest.php

代码语言:javascript
复制
<?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');
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-08-19 15:35:07

我想测试的声明缺失了,您可以将它放在autoload dev块中:

代码语言:javascript
复制
{
    "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命名空间中。

代码语言:javascript
复制
use Tests\PHPUnitTuts\FetchTask

对于PSR-0,必须更改文件夹结构,在文件夹PHPUnitTuts中移动类:

代码语言:javascript
复制
oop
 - src
   - PHPUnitTuts/FetchTask.php
 - tests
   - PHPUnitTuts/FetchTaskTest.php
 - vendor
 - composer.json
 - composer.lock
 - phpunit.xml

顺便说一下,PSR-0是不推荐的,为什么不使用PSR-4呢?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39041653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档