目录

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
    • convertErrorsToExceptionsconvertNoticesToExceptionsconvertWarningsToExceptions:是否将错误、通知、警告转换为异常,默认为true
    • processIsolation:是否为每个测试运行一个单独的 PHP 进程,默认为false
    • stopOnErrorstopOnFailurestopOnIncompletestopOnSkippedstopOnRisky:是否在遇到错误、失败、不完整、跳过、风险测试时停止执行,默认为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>:设置环境变量。

以上配置可以根据实际需求进行调整和扩展,以满足不同项目的测试需求。

通用配置选项

以下是一些在多个版本中通用的配置选项:

  1. <phpunit>元素的属性

    • backupGlobalsbackupStaticAttributesbootstrapcolors等属性在多个版本中都存在。
    • xsi:noNamespaceSchemaLocation属性用于指定 PHPUnit 的 XML Schema,不同版本的 PHPUnit 可能使用不同的 Schema 文件。
  2. <testsuites>元素

    • 用于定义测试套件,指定测试文件所在的目录。<testsuite><directory>元素在多个版本中都存在。
  3. <filter>元素

    • 用于配置代码覆盖率分析的过滤器。<whitelist><exclude>元素在多个版本中都存在。
  4. <logging>元素

    • 用于配置日志记录。<log>元素在多个版本中都存在,但支持的日志类型可能会有所不同。
  5. <php>元素

    • 用于配置 PHP 设置、常量、全局变量等。<ini><const><env>等元素在多个版本中都存在。

版本特定的配置选项

以下是一些在特定版本中引入或修改的配置选项:

  1. PHPUnit 6.x 及以上版本

    • 引入了<phpunit>元素的cacheResultFile属性,用于指定缓存结果文件的位置。
    • 引入了<phpunit>元素的cacheTokens属性,用于启用或禁用代码令牌的缓存。
    • 引入了<phpunit>元素的executionOrder属性,用于指定测试的执行顺序。
  2. PHPUnit 5.x 版本

    • 支持<phpunit>元素的printerClassprinterFile属性,用于指定自定义的测试结果打印机。
    • 支持<phpunit>元素的defaultTestSuite属性,用于指定默认的测试套件名称。
  3. PHPUnit 4.x 版本

    • 支持<phpunit>元素的testSuiteLoaderClasstestSuiteLoaderFile属性,用于指定自定义的测试套件加载器。
    • 支持<phpunit>元素的testRunnerClasstestRunnerFile属性,用于指定自定义的测试运行器。

IDE 识别单元测试方法

  • 1、命名。测试方法必须以"test"开头才能被 PHPUnit 识别为测试方法。比如 testGetPcPairingLogs
  • 2、父类。测试类应该继承自 PHPUnit 的 TestCase 类。
  • 3、注解。某些 IDE 需要特定的 PHPUnit 注解才能识别测试方法。比如:@test 注解明确标记这是一个测试方法;@covers 注解指明这个测试方法覆盖了哪个具体方法。
  • 4、phpunit.xml 配置。如果有启用 testsuites,需要将对应的测试类添加到 testsuites 中,或查看是否在指定的 testsuite 中(可能是目录)。

9ong@TsingChan 文章内容由 AI 辅助生成。