PhpUnit为每个测试设置工作空间目录


PhpUnit set workspace directory for every test

我没有发现任何描述如何注入外部数据到TestCases在phpunit。我的目标是在xml配置文件中设置一个工作空间目录,并从每个类中读取该目录的路径。现在我只能用全局变量来解决这个问题,这很恶心:

在引导:

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>

应该避免使用全局变量。为此,您可以在引导文件中定义常量。

我查看了文档,发现可以在XML文件中定义PHP值。

设置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来代替全局变量。