The XML Configuration File
XML配置文件
PHPUnit
<phpunit>元素的属性可以用来配置PHPUnit的核心功能。
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.3/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"
stopOnRisky="false"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
<!--testSuiteLoaderFile="/path/to/StandardTestSuiteLoader.php"-->
timeoutForSmallTests="1"
timeoutForMediumTests="10"
timeoutForLargeTests="60"
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
如果基于测试大小的时间限制被强制执行,那么这个属性为所有标记为的测试设置超时@large
。如果测试未在其配置的超时内完成,则会失败。
timeoutForMediumTests
如果基于测试大小的时间限制被强制执行,那么这个属性为所有标记为的测试设置超时@medium
。如果测试未在其配置的超时内完成,则会失败。
timeoutForSmallTests
如果基于测试大小的时间限制被强制执行,那么这个属性为没有标记为@medium
或的所有测试设置超时@large
。如果测试未在其配置的超时内完成,则会失败。
测试套件
<testsuites>元素及其一个或多个<testsuite>孩子可以用来构成一个测试套件出测试套件和测试用例。
<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版本。下面的例子只会添加/path/to/*Test.php
文件和/path/to/MyTest.php
文件,如果PHP版本至少5.3.0。
<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>孩子们可以用来选择标有组测试@group应该(不)来运行,注释(在被称为“@group”一节记载)。
<groups>
<include>
<group>name</group>
</include>
<exclude>
<group>name</group>
</exclude>
</groups>
上面的XML配置对应于使用以下选项调用TextUI测试运行器:
- --group name
- --exclude-group name
将代码覆盖率的白名单文件
该<filter>元素及其子可以用于配置代码覆盖率报告的白名单。
<filter>
<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" 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="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
- /tmp/logfile.txt
- --log-junit /tmp/logfile.xml
- --testdox-html /tmp/testdox.html
- --testdox-text /tmp/testdox.txt
lowUpperBound
,highLowerBound
,logIncompleteSkipped
和showUncoveredFiles
属性没有等价文本界面的测试选项。
lowUpperBound
:最大覆盖百分比被认为“低”覆盖。
highLowerBound
:最低覆盖率被认为“高度”覆盖。
showUncoveredFiles
:在--coverage-text
输出中显示所有列入白名单的文件,而不仅仅是具有覆盖信息的文件。
showOnlySummary
:仅显示--coverage-text
输出中的摘要。
测试
<listeners>元素及其<listener>孩子可以用于连接其它测试听众测试执行。
<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(
['Sebastian'],
22,
'April',
19.78,
null,
new stdClass
设置PHP INI设置,常量和全局变量
The `<php>` element and its children can be used to configure PHP settings, constants, and global variables. It can also be used to prepend the `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';