带有composer的PHPUnit自动加载器类

时间:2017-01-27 18:17:53

标签: php testing phpunit composer-php

我的项目结构是:

--/
--src
--tests
--phpunit.xml
--composer.json

我想在测试中使用composer从src文件夹中自动加载我的类。 我的composer.json:

{
"name": "codewars/pack",
"description": "Codewars project",
"type": "project",
"require": {
    "fxp/composer-asset-plugin": "^1.2.0",
    "phpunit/phpunit": "5.5.*",
    "phpunit/dbunit": "2.0.*"
},
"autoload": {
    "psr-4": {"Source\\": "src/"
    }
}

}

生成的自动加载文件:

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
'Source\\' => array($baseDir . '/src'),
);

我的phpunit.xml:

<phpunit bootstrap="vendor/autoload.php">
<testsuites>
    <testsuite name="Tests">
        <directory>tests</directory>
    </testsuite>
</testsuites>
</phpunit>

我的测试文件示例:

class Task2Test extends PHPUnit_Framework_TestCase
{
public function testTask2(){
    $list=[1,3,5,9,11];
    $this->assertEquals(7,\Source\findMissing($list));
    $list=[1,5,7];
    $this->assertEquals(3,\Source\findMissing($list));
 }

}

当我运行测试时,我会收到错误,例如致命错误:调用未定义的函数Source \ findMissing()

请帮助我,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

PSR-4专为自动加载类而设计,不适用于功能。因为php无法找到具有您功能的文件。

使用类和静态方法编写代码可能更好吗?比你可以使用PSR-4自动加载。另一种方法是指定&#34;文件&#34;部分进入autoload部分

{
    "name": "codewars/pack",
    "description": "Codewars project",
    "type": "project",
    "require": {
        "fxp/composer-asset-plugin": "^1.2.0",
        "phpunit/phpunit": "5.5.*",
        "phpunit/dbunit": "2.0.*"
},
"autoload": {
    "files": [
        "src/my_cool_function1.php",
        "src/my_cool_function2.php"
    ],
    "psr-4": {
        "Source\\": "src/"
    }
}

有关详细信息,请参阅this question