我还没有找到任何描述如何将外部数据注入phpunit中的TestCase。我的目标是在xml配置文件中设置工作区目录,并从每个类中读取该路径。现在我只能用全局变量来解决这个问题,这很恶心:
在bootstrap中:
global $workspace;
$workspace = __DIR__ . '/../test/WorkSpace/';
在测试中:
class MyTest extends PHPUnit_Framework_TestCase
{
protected $workSpace;
public function __construct()
{
global $workspace;
$this->workSpace = $workspace;
parent::__construct();
}
//...
}
配置xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://phpunit.de/phpunit.xsd"
backupGlobals="false"
verbose="true"
bootstrap="Application/bootstrap.php">
<testsuites>
<testsuite name="PHPUnit">
<directory>test</directory>
</testsuite>
</testsuites>
</phpunit>
答案 0 :(得分:3)
你应该避免使用全局变量。为此,您可以在引导程序文件中define constants。
我正在审核文档,我发现you can define PHP values in your XML file。
设置PHP INI设置,常量和全局变量
元素及其子元素可用于配置PHP设置,常量和全局变量。它也可以用于添加include_path。
<php>
<includePath>.</includePath>
<ini name="foo" value="bar"/>
<const name="foo" value="bar"/>
<var name="foo" value="bar"/>
<env name="foo" value="bar"/>
<post name="foo" value="bar"/>
<get name="foo" value="bar"/>
<cookie name="foo" value="bar"/>
<server name="foo" value="bar"/>
<files name="foo" value="bar"/>
<request name="foo" value="bar"/>
</php>
上面的XML配置对应于以下PHP代码:
ini_set('foo', 'bar');
define('foo', 'bar');
$GLOBALS['foo'] = 'bar';
$_ENV['foo'] = 'bar';
$_POST['foo'] = 'bar';
$_GET['foo'] = 'bar';
$_COOKIE['foo'] = 'bar';
$_SERVER['foo'] = 'bar';
$_FILES['foo'] = 'bar';
$_REQUEST['foo'] = 'bar';
正如我上面所说,我建议你使用define而不是全局变量来使用常量。