附录 C. XML 配置文件

PHPUnit

<phpunit> 元素的属性用于配置 PHPUnit 的核心功能。

<phpunit
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.2/phpunit.xsd"
         backupGlobals="true"
         backupStaticAttributes="false"
         <!--bootstrap="/path/to/bootstrap.php"-->
         cacheTokens="false"
         colors="false"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         forceCoversAnnotation="false"
         mapTestClassNameToCoveredClassName="false"
         printerClass="PHPUnit_TextUI_ResultPrinter"
         <!--printerFile="/path/to/ResultPrinter.php"-->
         processIsolation="false"
         stopOnError="false"
         stopOnFailure="false"
         stopOnIncomplete="false"
         stopOnSkipped="false"
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
         <!--testSuiteLoaderFile="/path/to/StandardTestSuiteLoader.php"-->
         timeoutForSmallTests="1"
         timeoutForMediumTests="10"
         timeoutForLargeTests="60"
         strict="false"
         verbose="false">
  <!-- ... -->
</phpunit>

以上 XML 配置对应的是在 “命令行选项”一节 描述过的 TextUI 测试执行器的默认行为。

其他那些不能用命令行选项来配置的选项有:

convertErrorsToExceptions

默认情况下,PHPUnit 将会安插一个错误处理程序来将以下错误转换为异常:

  • E_WARNING
  • E_NOTICE
  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE
  • E_STRICT
  • E_RECOVERABLE_ERROR
  • E_DEPRECATED
  • E_USER_DEPRECATED

convertErrorsToExceptions 设为 false 可以禁用此功能。

convertNoticesToExceptions

设置为 false 时,由 convertErrorsToExceptions 安插的错误处理程序不会将 E_NOTICEE_USER_NOTICEE_STRICT 错误转换为异常。

convertWarningsToExceptions

设置为 false 时,由 convertErrorsToExceptions 安插的错误处理程序不会将 E_WARNINGE_USER_WARNING 错误转换为异常。

forceCoversAnnotation

只记录使用了 “@covers”一节 描述的 @covers 标注的测试的代码覆盖率。

timeoutForLargeTests

如果安装了 PHP_Invoker 组件包并启用了严格模式,此属性为所有标记为 @large 的测试设定超时限制。如果测试未能在这个配置所指定的超时限制时间内完成,即视为失败。

timeoutForMediumTests

如果安装了 PHP_Invoker 组件包并启用了严格模式,此属性为所有标记为 @medium 的测试设定超时限制。如果测试未能在这个配置所指定的超时限制时间内完成,即视为失败。

timeoutForSmallTests

如果安装了 PHP_Invoker 组件包并启用了严格模式,此属性为所有未标记为 @medium@large 的测试设定超时限制。如果测试未能在这个配置所指定的超时限制时间内完成,即视为失败。

测试套件

带有一个或多个 <testsuite> 子元素的 <testsuites> 元素用于将测试用例与测试套件组合成测试套件。

<testsuites>
  <testsuite name="My Test Suite">
    <directory>/path/to/*Test.php files</directory>
    <file>/path/to/MyTest.php</file>
    <exclude>/path/to/exclude</exclude>
  </testsuite>
</testsuites>

可以用 phpVersionphpVersionOperator 属性来指定 PHP 版本需求。在以下例子中,仅当 PHP 版本至少为 5.3.0 时才会将 /path/to/*Test.php 文件与 /path/to/MyTest.php 添加到测试套件中。

  <testsuites>
    <testsuite name="My Test Suite">
      <directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">/path/to/files</directory>
      <file phpVersion="5.3.0" phpVersionOperator=">=">/path/to/MyTest.php</file>
    </testsuite>
  </testsuites>

phpVersionOperator 属性是可选的,默认为 >=

分组

<groups> 元素及其 <include><exclude><group> 子元素用于从测试套件中选择需要运行(或不运行)的分组。

<groups>
  <include>
    <group>name</group>
  </include>
  <exclude>
    <group>name</group>
  </exclude>
</groups>

以上 XML 配置对应于用以下命令行选项来调用 TextUI 测试执行器:

  • --group name

  • --exclude-group name

为代码覆盖率包含或排除文件

<filter> 元素及其子元素用于配置代码覆盖率报告的黑名单与白名单。

<filter>
  <blacklist>
    <directory suffix=".php">/path/to/files</directory>
    <file>/path/to/file</file>
    <exclude>
      <directory suffix=".php">/path/to/files</directory>
      <file>/path/to/file</file>
    </exclude>
  </blacklist>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">/path/to/files</directory>
    <file>/path/to/file</file>
    <exclude>
      <directory suffix=".php">/path/to/files</directory>
      <file>/path/to/file</file>
    </exclude>
  </whitelist>
</filter>

日志记录

<logging> 元素及其 <log> 子元素用于配置测试执行情况的日志记录。

<logging>
  <log type="coverage-html" target="/tmp/report" charset="UTF-8"
       highlight="false" lowUpperBound="35" highLowerBound="70"/>
  <log type="coverage-clover" target="/tmp/coverage.xml"/>
  <log type="coverage-php" target="/tmp/coverage.serialized"/>
  <log type="coverage-text" target="php://stdout" showUncoveredFiles="false"/>
  <log type="json" target="/tmp/logfile.json"/>
  <log type="tap" target="/tmp/logfile.tap"/>
  <log type="junit" target="/tmp/logfile.xml" logIncompleteSkipped="false"/>
  <log type="testdox-html" target="/tmp/testdox.html"/>
  <log type="testdox-text" target="/tmp/testdox.txt"/>
</logging>

以上 XML 配置对应于用以下命令行选项来调用 TextUI 测试执行器:

  • --coverage-html /tmp/report

  • --coverage-clover /tmp/coverage.xml

  • --coverage-php /tmp/coverage.serialized

  • --coverage-text

  • --log-json /tmp/logfile.json

  • > /tmp/logfile.txt

  • --log-tap /tmp/logfile.tap

  • --log-junit /tmp/logfile.xml

  • --testdox-html /tmp/testdox.html

  • --testdox-text /tmp/testdox.txt

charsethighlightlowUpperBoundhighLowerBoundlogIncompleteSkippedshowUncoveredFiles 属性没有等价的 TextUI 测试执行器选项。

  • charset:生成的 HTML 页面所要使用的字符集。

  • highlight:设置为 true 时,覆盖率报告中的代码将会进行语法高亮标注。

  • lowUpperBound:“低”覆盖率区间的百分比上限。

  • highLowerBound:“高”覆盖率区间的百分比下限。

  • showUncoveredFiles:在 --coverage-text 输出中显示所有白名单中的文件,而不只是有覆盖率信息的那些。

  • showOnlySummary:在 --coverage-text 的输出中只显示摘要。

测试监听器(Test Listeners)

带有一个或多个 <listener> 子元素的 <listeners> 元素用于将测试监听器接入到测试执行过程中。

<listeners>
  <listener class="MyListener" file="/optional/path/to/MyListener.php">
    <arguments>
      <array>
        <element key="0">
          <string>Sebastian</string>
        </element>
      </array>
      <integer>22</integer>
      <string>April</string>
      <double>19.78</double>
      <null/>
      <object class="stdClass"/>
    </arguments>
  </listener>
</listeners>

上述 XML 配置表示将 $listener 对象(如下)接入到测试执行过程中:

$listener = new MyListener(
  array('Sebastian'),
  22,
  'April',
  19.78,
  NULL,
  new stdClass
);

设定 PHP INI 配置、常量、全局变量

<php> 元素及其子元素用于配置 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';

为 Selenium RC 配置浏览器

<selenium> 元素及其 <browser> 子元素用于配置 Selenium RC 服务器列表。

<selenium>
  <browser name="Firefox on Linux"
           browser="*firefox /usr/lib/firefox/firefox-bin"
           host="my.linux.box"
           port="4444"
           timeout="30000"/>
</selenium>

以上 XML 配置对应于以下 PHP 代码:

class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
    public static $browsers = array(
      array(
        'name'    => 'Firefox on Linux',
        'browser' => '*firefox /usr/lib/firefox/firefox-bin',
        'host'    => 'my.linux.box',
        'port'    => 4444,
        'timeout' => 30000
      )
    );

    // ...
}