我的项目结构是:
--/
--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()
请帮助我,我该如何解决这个问题?
答案 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