hoh*_*ner 22 php phpunit namespaces
我是PHPUnit的新手,在设置它以访问我的PHP文件时遇到了一些麻烦.我用于我的应用程序的目录结构是这样的:
./phpunit.xml
./lib/Application/
-> Dir1/File1.php (namespace = Application\Dir1)
-> Dir1/File2.php
-> Dir2/File1.php (namespace = Application\Dir2)
./tests/Application/Tests
-> Test1.php (namespace = Application\Tests)
-> Test2.php
Run Code Online (Sandbox Code Playgroud)
在我的PhpUnit.xml中,我有:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit verbose="false">
<testsuites>
<testsuite name="Application">
<directory>./tests/Application/Tests</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-text" target="php://stdout" showUncoveredFiles="false"/>
<log type="json" target="/tmp/phpunit-logfile.json"/>
</logging>
<filter>
<whitelist>
<directory suffix=".php">./lib</directory>
</whitelist>
</filter>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
在我的一个测试文件中,我打开:
namespace Application\Tests;
use Application\Dir1\File1;
class MyTest extends File1 {}
Run Code Online (Sandbox Code Playgroud)
但它继续说:
找不到类'Application\Dir1\File1'
我哪里错了?
Joh*_*ldo 26
如果您使用Composer安装了PHPUnit,那么您可以使用Composers自动加载器.最简单的方法是添加:
"autoload":{
"psr-0":{
"your-app-directory":""
}
}
Run Code Online (Sandbox Code Playgroud)
到composer.json
即使您使用use
,您仍然必须通过使用include
、require
、include_once
、 或require_once
或使用spl_autoload_register
来包含文件来包含文件,如下所示:
spl_autoload_register(function ($class)
{
include '\lib\\' . $class . 'php';
});
Run Code Online (Sandbox Code Playgroud)
当你再尝试使用Application\Dir1\File1
脚本时会自动运行include '\lib\Application\Dir1\File1.php'