phpunit.xml配置说明
目录
PHPUnit 的 XML 配置文件在不同版本之间存在一些差异,尽管许多基本配置选项在多个版本中保持一致。随着 PHPUnit 版本的更新,一些配置选项可能会被引入、弃用或修改。因此,虽然某些配置是通用的,但某些特定的配置选项可能仅适用于特定版本的 PHPUnit。
PHPUnit 5.x 的 XML 配置
以下是一个适用于 PHPUnit 5.x 的 XML 配置文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.0/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
verbose="false">
<testsuites>
<testsuite name="My Test Suite">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src</directory>
<exclude>
<directory suffix=".php">src/Generated</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="coverage/report" lowUpperBound="35" highLowerBound="70"/>
<log type="junit" target="logs/junit.xml"/>
</logging>
<php>
<ini name="display_errors" value="1"/>
<const name="MY_CONSTANT" value="my_value"/>
<env name="MY_ENV_VAR" value="my_env_value"/>
</php>
</phpunit>
PHPUnit 6.x 的 XML 配置
以下是一个适用于 PHPUnit 6.x 的 XML 配置文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.0/phpunit.xsd"
backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
verbose="false"
cacheResultFile="build/phpunit.cache"
cacheTokens="true"
executionOrder="depends,defects">
<testsuites>
<testsuite name="My Test Suite">
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">src</directory>
<exclude>
<directory suffix=".php">src/Generated</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="coverage/report" lowUpperBound="35" highLowerBound="70"/>
<log type="junit" target="logs/junit.xml"/>
</logging>
<php>
<ini name="display_errors" value="1"/>
<const name="MY_CONSTANT" value="my_value"/>
<env name="MY_ENV_VAR" value="my_env_value"/>
</php>
</phpunit>
配置说明
<phpunit>元素的属性:backupGlobals:是否在每个测试前备份全局变量,默认为false。backupStaticAttributes:是否在每个测试前备份静态属性,默认为false。bootstrap:指定在运行测试之前加载的引导脚本,通常用于注册自动加载器。colors:是否在输出中使用颜色,默认为false。convertErrorsToExceptions、convertNoticesToExceptions、convertWarningsToExceptions:是否将错误、通知、警告转换为异常,默认为true。processIsolation:是否为每个测试运行一个单独的 PHP 进程,默认为false。stopOnError、stopOnFailure、stopOnIncomplete、stopOnSkipped、stopOnRisky:是否在遇到错误、失败、不完整、跳过、风险测试时停止执行,默认为false。verbose:是否启用详细模式,默认为false。
<testsuites>元素:定义测试套件,指定测试文件所在的目录。<testsuite>:测试套件的名称。<directory>:测试文件所在的目录,suffix属性指定文件后缀。
<filter>元素:配置代码覆盖率分析的过滤器。<whitelist>:定义要包含在代码覆盖率分析中的文件。<directory>:指定目录,suffix属性指定文件后缀。<exclude>:排除某些文件或目录。
<logging>元素:配置日志记录。<log>:定义日志的类型和目标文件。type="coverage-html":生成 HTML 格式的代码覆盖率报告。如果暂时不需要生成可以屏蔽。type="junit":生成 JUnit XML 格式的测试结果日志。
<php>元素:配置 PHP 设置、常量、全局变量等。<ini>:设置 PHP 配置项。<const>:设置全局常量。<env>:设置环境变量。
以上配置可以根据实际需求进行调整和扩展,以满足不同项目的测试需求。
通用配置选项
以下是一些在多个版本中通用的配置选项:
-
<phpunit>元素的属性:backupGlobals、backupStaticAttributes、bootstrap、colors等属性在多个版本中都存在。xsi:noNamespaceSchemaLocation属性用于指定 PHPUnit 的 XML Schema,不同版本的 PHPUnit 可能使用不同的 Schema 文件。
-
<testsuites>元素:- 用于定义测试套件,指定测试文件所在的目录。
<testsuite>和<directory>元素在多个版本中都存在。
- 用于定义测试套件,指定测试文件所在的目录。
-
<filter>元素:- 用于配置代码覆盖率分析的过滤器。
<whitelist>和<exclude>元素在多个版本中都存在。
- 用于配置代码覆盖率分析的过滤器。
-
<logging>元素:- 用于配置日志记录。
<log>元素在多个版本中都存在,但支持的日志类型可能会有所不同。
- 用于配置日志记录。
-
<php>元素:- 用于配置 PHP 设置、常量、全局变量等。
<ini>、<const>、<env>等元素在多个版本中都存在。
- 用于配置 PHP 设置、常量、全局变量等。
版本特定的配置选项
以下是一些在特定版本中引入或修改的配置选项:
-
PHPUnit 6.x 及以上版本:
- 引入了
<phpunit>元素的cacheResultFile属性,用于指定缓存结果文件的位置。 - 引入了
<phpunit>元素的cacheTokens属性,用于启用或禁用代码令牌的缓存。 - 引入了
<phpunit>元素的executionOrder属性,用于指定测试的执行顺序。
- 引入了
-
PHPUnit 5.x 版本:
- 支持
<phpunit>元素的printerClass和printerFile属性,用于指定自定义的测试结果打印机。 - 支持
<phpunit>元素的defaultTestSuite属性,用于指定默认的测试套件名称。
- 支持
-
PHPUnit 4.x 版本:
- 支持
<phpunit>元素的testSuiteLoaderClass和testSuiteLoaderFile属性,用于指定自定义的测试套件加载器。 - 支持
<phpunit>元素的testRunnerClass和testRunnerFile属性,用于指定自定义的测试运行器。
- 支持
IDE 识别单元测试方法
- 1、命名。测试方法必须以"test"开头才能被 PHPUnit 识别为测试方法。比如
testGetPcPairingLogs。 - 2、父类。测试类应该继承自 PHPUnit 的 TestCase 类。
- 3、注解。某些 IDE 需要特定的 PHPUnit 注解才能识别测试方法。比如:@test 注解明确标记这是一个测试方法;@covers 注解指明这个测试方法覆盖了哪个具体方法。
- 4、phpunit.xml 配置。如果有启用 testsuites,需要将对应的测试类添加到 testsuites 中,或查看是否在指定的 testsuite 中(可能是目录)。
9ong@TsingChan 文章内容由 AI 辅助生成。