我的项目结构是:
--/
--src
--tests
--phpunit.xml
--composer.json
我想使用作曲家在测试中从 src 文件夹自动加载我的类。我的作曲家.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,SourcefindMissing($list));
$list=[1,5,7];
$this->assertEquals(3,SourcefindMissing($list));
}
}
当我运行测试时,我收到错误,例如致命错误:调用未定义的函数源\查找丢失()
请帮帮我,我该如何解决这个问题?
PSR-4 设计用于自动加载类,而不是函数。因为 php 找不到包含您的函数的文件。
可能是使用类和静态方法编写代码的更好方法?比您可以使用PSR-4自动加载。另一种方法是将"文件"部分指定为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/"
}
}
有关更多信息,请参阅此问题