<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_NOTICE
、E_USER_NOTICE
、E_STRICT
错误转换为异常。
convertWarningsToExceptions
设置为 false
时,由 convertErrorsToExceptions
安插的错误处理程序不会将 E_WARNING
或 E_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>
可以用 phpVersion
和 phpVersionOperator
属性来指定 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
charset
、highlight
、lowUpperBound
、highLowerBound
、logIncompleteSkipped
和 showUncoveredFiles
属性没有等价的 TextUI 测试执行器选项。
charset
:生成的 HTML 页面所要使用的字符集。
highlight
:设置为 true
时,覆盖率报告中的代码将会进行语法高亮标注。
lowUpperBound
:“低”覆盖率区间的百分比上限。
highLowerBound
:“高”覆盖率区间的百分比下限。
showUncoveredFiles
:在 --coverage-text
输出中显示所有白名单中的文件,而不只是有覆盖率信息的那些。
showOnlySummary
:在 --coverage-text
的输出中只显示摘要。
带有一个或多个 <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>
元素及其子元素用于配置 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>
元素及其 <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 ) ); // ... }