让我们来瞧瞧以下代码中命令行测试运行器的各种选项:
~~~
phpunit --help
PHPUnit 5.0.0 by Sebastian Bergmann and contributors.
Usage: phpunit [options] UnitTest [UnitTest.php]
phpunit [options] <directory>
Code Coverage Options:
--coverage-clover <file> Generate code coverage report in Clover XML format.
--coverage-crap4j <file> Generate code coverage report in Crap4J XML format.
--coverage-html <dir> Generate code coverage report in HTML format.
--coverage-php <file> Export PHP_CodeCoverage object to file.
--coverage-text=<file> Generate code coverage report in text format.
Default: Standard output.
--coverage-xml <dir> Generate code coverage report in PHPUnit XML format.
Logging Options:
--log-junit <file> Log test execution in JUnit XML format to file.
--log-tap <file> Log test execution in TAP format to file.
--log-json <file> Log test execution in JSON format.
--testdox-html <file> Write agile documentation in HTML format to file.
--testdox-text <file> Write agile documentation in Text format to file.
Test Selection Options:
--filter <pattern> Filter which tests to run.
--testsuite <pattern> Filter which testsuite to run.
--group ... Only runs tests from the specified group(s).
--exclude-group ... Exclude tests from the specified group(s).
--list-groups List available test groups.
--test-suffix ... Only search for test in files with specified
suffix(es). Default: Test.php,.phpt
Test Execution Options:
--report-useless-tests Be strict about tests that do not test anything.
--strict-coverage Be strict about unintentionally covered code.
--strict-global-state Be strict about changes to global state
--disallow-test-output Be strict about output during tests.
--enforce-time-limit Enforce time limit based on test size.
--disallow-todo-tests Disallow @todo-annotated tests.
--process-isolation Run each test in a separate PHP process.
--no-globals-backup Do not backup and restore $GLOBALS for each test.
--static-backup Backup and restore static attributes for each test.
--colors=<flag> Use colors in output ("never", "auto" or "always").
--columns <n> Number of columns to use for progress output.
--columns max Use maximum number of columns for progress output.
--stderr Write to STDERR instead of STDOUT.
--stop-on-error Stop execution upon first error.
--stop-on-failure Stop execution upon first error or failure.
--stop-on-risky Stop execution upon first risky test.
--stop-on-skipped Stop execution upon first skipped test.
--stop-on-incomplete Stop execution upon first incomplete test.
-v|--verbose Output more verbose information.
--debug Display debugging information during test execution.
--loader <loader> TestSuiteLoader implementation to use.
--repeat <times> Runs the test(s) repeatedly.
--tap Report test execution progress in TAP format.
--testdox Report test execution progress in TestDox format.
--printer <printer> TestListener implementation to use.
Configuration Options:
--bootstrap <file> A "bootstrap" PHP file that is run before the tests.
-c|--configuration <file> Read configuration from XML file.
--no-configuration Ignore default configuration file (phpunit.xml).
--include-path <path(s)> Prepend PHP's include_path with given path(s).
-d key[=value] Sets a php.ini value.
Miscellaneous Options:
-h|--help Prints this usage information.
--version Prints the version and exits.
~~~
`phpunit UnitTest`
运行由 `UnitTest` 类提供的测试。这个类应当在 `UnitTest.php` 源文件中声明。
`UnitTest` 这个类必须满足以下二个条件之一:要么它继承自 `PHPUnit_Framework_TestCase`;要么它提供 `public static suite()` 方法,这个方法返回一个 `PHPUnit_Framework_Test` 对象,比如,一个 `PHPUnit_Framework_TestSuite` 类的实例。
`phpunit UnitTest UnitTest.php`
运行由 `UnitTest` 类提供的测试。这个类应当在指定的源文件中声明。
`--coverage-clover`
为运行的测试生成带有代码覆盖率信息的 XML 格式的日志文件。更多细节请参见[第 13 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#logging "第 13 章 Logging (日志记录)")。
请注意,此功能仅当安装了 tokenizer 和 Xdebug 这两个 PHP 扩展后才可用。
`--coverage-crap4j`
生成 Crap4j 格式的代码覆盖率报告。更多细节请参见[第 11 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#code-coverage-analysis "第 11 章 代码覆盖率分析")。
请注意,此功能仅当安装了 tokenizer 和 Xdebug 这两个 PHP 扩展后才可用。
`--coverage-html`
生成 HTML 格式的代码覆盖率报告。更多细节请参见 [第 11 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#code-coverage-analysis "第 11 章 代码覆盖率分析")。
请注意,此功能仅当安装了 tokenizer 和 Xdebug 这两个 PHP 扩展后才可用。
`--coverage-php`
生成一个序列化后的 PHP_CodeCoverage 对象,此对象含有代码覆盖率信息。
请注意,此功能仅当安装了 tokenizer 和 Xdebug 这两个 PHP 扩展后才可用。
`--coverage-text`
为运行的测试以人们可读的格式生成带有代码覆盖率信息的日志文件或命令行输出。更多细节请参见 [第 13 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#logging "第 13 章 Logging (日志记录)")。
请注意,此功能仅当安装了 tokenizer 和 Xdebug 这两个 PHP 扩展后才可用。
`--log-junit`
为运行的测试生成 JUnit XML 格式的日志文件。更多细节请参见 [第 13 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#logging "第 13 章 Logging (日志记录)")。
`--log-tap`
为运行的测试生成 [Test Anything Protocol (TAP)](http://testanything.org/) 格式的日志文件。更多细节请参见[第 13 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#logging "第 13 章 Logging (日志记录)")。
`--log-json`
生成 [JSON](http://www.json.org/) 格式的日志文件。更多细节请参见[第 13 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#logging "第 13 章 Logging (日志记录)")。
`--testdox-html` 和 `--testdox-text`
为运行的测试以 HTML 或纯文本格式生成敏捷文档。更多细节请参见 [第 12 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#other-uses-for-tests "第 12 章 测试的其他用途")。
`--filter`
只运行名称与给定模式匹配的测试。如果模式未闭合包裹于分隔符,PHPUnit 将用 `/` 分隔符对其进行闭合包裹。
测试名称将以以下格式之一进行匹配:
~~~
TestNamespace\TestCaseClass::testMethod
~~~
默认的测试名称格式等价于在测试方法内使用 `__METHOD__` 魔术常量。
~~~
TestNamespace\TestCaseClass::testMethod with data set #0
~~~
当测试拥有数据供给器时,数据的每轮迭代都会将其当前索引附加在默认测试名称结尾处。
~~~
TestNamespace\TestCaseClass::testMethod with data set "my named data"
~~~
当测试拥有使用命名数据集的数据供给器时,数据的每轮迭代都会将当前名称附加在默认测试名称结尾处。命名数据集的例子参见[例 3.1](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#textui.examples.TestCaseClass.php "例 3.1: 命名数据集")。
**例 3.1: 命名数据集**
~~~
<?php
namespace TestNamespace;
class TestCaseClass extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testMethod($data)
{
$this->assertTrue($data);
}
public function provider()
{
return array(
'my named data' => array(true),
'my data' => array(true)
);
}
}
?>
~~~
`/path/to/my/test.phpt`
对于 PHPT 测试,其测试名称是文件系统路径。
有效的过滤器模式例子参见[例 3.2](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#textui.examples.filter-patterns "例 3.2: 过滤器模式例子")。
**例 3.2: 过滤器模式例子**
* `--filter 'TestNamespace\\TestCaseClass::testMethod'`
* `--filter 'TestNamespace\\TestCaseClass'`
* `--filter TestNamespace`
* `--filter TestCaseClass`
* `--filter testMethod`
* `--filter '/::testMethod .*"my named data"/'`
* `--filter '/::testMethod .*#5$/'`
* `--filter '/::testMethod .*#(5|6|7)$/'`
在匹配数据供给器时有一些额外的快捷方式,参见[例 3.3](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#textui.examples.filter-shortcuts "例 3.3: 过滤器的快捷方式")。
**例 3.3: 过滤器的快捷方式**
* `--filter 'testMethod#2'`
* `--filter 'testMethod#2-4'`
* `--filter '#2'`
* `--filter '#2-4'`
* `--filter 'testMethod@my named data'`
* `--filter 'testMethod@my.*data'`
* `--filter '@my named data'`
* `--filter '@my.*data'`
`--testsuite`
只运行名称与给定模式匹配的测试套件。
`--group`
只运行来自指定分组(可以多个)的测试。可以用 `@group` 标注为测试标记其所属的分组。
`@author` 标注是 `@group` 的一个别名,允许按作者来筛选测试。
`--exclude-group`
排除来自指定分组(可以多个)的测试。可以用 `@group` 标注为测试标记其所属的分组。
`--list-groups`
列出所有有效的测试分组。
`--test-suffix`
只查找文件名以指定后缀(可以多个)结尾的测试文件。
`--report-useless-tests`
更严格对待事实上不测试任何内容的测试。详情参见 [第 6 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#risky-tests "第 6 章 有风险的测试")。
`--strict-coverage`
更严格对待意外的代码覆盖。详情参见 [第 6 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#risky-tests "第 6 章 有风险的测试")。
`--strict-global-state`
更严格对待全局状态篡改。详情参见 [第 6 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#risky-tests "第 6 章 有风险的测试")。
`--disallow-test-output`
更严格对待测试执行期间产生的输出。详情参见[第 6 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#risky-tests "第 6 章 有风险的测试")。
`--disallow-todo-tests`
不执行文档注释块中含有 `@todo` 标注的测试。
`--enforce-time-limit`
根据测试规模对其加上执行时长限制。详情参见[第 6 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#risky-tests "第 6 章 有风险的测试")。
`--process-isolation`
每个测试都在独立的PHP进程中运行。
`--no-globals-backup`
不要备份并还原 $GLOBALS。更多细节请参见[“全局状态”一节](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#fixtures.global-state "全局状态")。
`--static-backup`
备份并还原用户定义的类中的静态属性。更多细节请参见[“全局状态”一节](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#fixtures.global-state "全局状态")。
`--colors`
使用彩色输出。Windows下,用 [ANSICON](https://github.com/adoxa/ansicon) 或 [ConEmu](https://github.com/Maximus5/ConEmu)。
本选项有三个可能的值:
* `never`: 完全不使用彩色输出。当未使用 `--colors` 选项时,这是默认值。
* `auto`: 如果当前终端不支持彩色、或者输出被管道输出至其他命令、或输出被重定向至文件时,不使用彩色输出,其余情况使用彩色。
* `always`: 总是使用彩色输出,即使当前终端不支持彩色、输出被管道输出至其他命令、或输出被重定向至文件。
当使用了 `--colors` 选项但未指定任何值时,将选择 `auto` 做为其值。
`--columns`
定义输出所使用的列数。如果将其值定义为 `max`,则使用当前终端所支持的最大列数。
`--stderr`
选择输出到 `STDERR` 而非 `STDOUT`.
`--stop-on-error`
首次错误出现后停止执行。
`--stop-on-failure`
首次错误或失败出现后停止执行。
`--stop-on-risky`
首次碰到有风险的测试时停止执行。
`--stop-on-skipped`
首次碰到跳过的测试时停止执行。
`--stop-on-incomplete`
首次碰到不完整的测试时停止执行。
`--verbose`
输出更详尽的信息,例如不完整或者跳过的测试的名称。
`--debug`
输出调试信息,例如当一个测试开始执行时输出其名称。
`--loader`
指定要使用的 `PHPUnit_Runner_TestSuiteLoader` 实现。
标准的测试套件加载器将在当前工作目录和 PHP 的 `include_path` 配置指令中指定的每个目录内查找源文件。诸如 `Project_Package_Class` 这样的类名对应的源文件名为 `Project/Package/Class.php`。
`--repeat`
将测试重复运行指定次数。
`--tap`
使用 [Test Anything Protocol (TAP)](http://testanything.org/) 报告测试进度。更多细节请参见 [第 13 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#logging "第 13 章 Logging (日志记录)")。
`--testdox`
将测试进度以敏捷文档方式报告。更多细节请参见 [第 12 章](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#other-uses-for-tests "第 12 章 测试的其他用途")。
`--printer`
指定要使用的结果输出器(printer)。输出器类必须扩展 `PHPUnit_Util_Printer` 并且实现 `PHPUnit_Framework_TestListener` 接口。
`--bootstrap`
在测试前先运行一个 "bootstrap" PHP 文件。
`--configuration`, `-c`
从 XML 文件中读取配置信息。更多细节请参见[附录 C](https://phpunit.de/manual/current/zh_cn/phpunit-book.html#appendixes.configuration "附录 C. XML 配置文件")。
如果 `phpunit.xml` 或 `phpunit.xml.dist` (按此顺序)存在于当前工作目录并且*未*使用 `--configuration`,将自动从此文件中读取配置。
`--no-configuration`
忽略当前工作目录下的 `phpunit.xml` 与 `phpunit.xml.dist`。
`--include-path`
向 PHP 的 `include_path` 开头添加指定路径(可以多个)。
`-d`
设置指定的 PHP 配置选项的值。
>[info] ### 注意
> 请注意,从 4.8 开始,选项不能放在参数之后。
- PHPUnit 手册
- 1. 安装 PHPUnit
- 需求
- PHP 档案包 (PHAR)
- Composer
- 可选的组件包
- 2. 编写 PHPUnit 测试
- 测试的依赖关系
- 数据供给器
- 对异常进行测试
- 对 PHP 错误进行测试
- 对输出进行测试
- 错误相关信息的输出
- 3. 命令行测试执行器
- 命令行选项
- 4. 基境(fixture)
- setUp() 多 tearDown() 少
- 变体
- 基境共享
- 全局状态
- 5. 组织测试
- 用文件系统来编排测试套件
- 用 XML 配置来编排测试套件
- 6. 有风险的测试
- 无用测试
- 意外的代码覆盖
- 测试执行期间产生的输出
- 测试执行时长的超时限制
- 全局状态篡改
- 7. 未完成的测试与跳过的测试
- 未完成的测试
- 跳过测试
- 用 @requires 来跳过测试
- 8. 数据库测试
- 数据库测试所支持的供应商
- 数据库测试的难点
- 数据库测试的四个阶段
- PHPUnit 数据库测试用例的配置
- 理解 DataSet(数据集)和 DataTable(数据表)
- 数据库连接 API
- 数据库断言 API
- 常见问题(FAQ)
- 9. 测试替身
- Stubs (桩件)
- 仿件对象(Mock Object)
- Prophecy
- 对特质(Trait)与抽象类进行模仿
- 对 Web 服务(Web Services)进行上桩或模仿
- 对文件系统进行模仿
- 10. 测试实践
- 在开发过程中
- 在调试过程中
- 11. 代码覆盖率分析
- 用于代码覆盖率的软件衡量标准
- 包含与排除文件
- 略过代码块
- 指明要覆盖的方法
- 边缘情况
- 12. 测试的其他用途
- 敏捷文档
- 跨团队测试
- 13. Logging (日志记录)
- 测试结果 (XML)
- 测试结果 (TAP)
- 测试结果 (JSON)
- 代码覆盖率 (XML)
- 代码覆盖率 (TEXT)
- 14. 扩展 PHPUnit
- 从 PHPUnit_Framework_TestCase 派生子类
- 编写自定义断言
- 实现 PHPUnit_Framework_TestListener
- 从 PHPUnit_Extensions_TestDecorator 派生子类
- 实现 PHPUnit_Framework_Test
- A. 断言
- assertArrayHasKey()
- assertClassHasAttribute()
- assertArraySubset()
- assertClassHasStaticAttribute()
- assertContains()
- assertContainsOnly()
- assertContainsOnlyInstancesOf()
- assertCount()
- assertEmpty()
- assertEqualXMLStructure()
- assertEquals()
- assertFalse()
- assertFileEquals()
- assertFileExists()
- assertGreaterThan()
- assertGreaterThanOrEqual()
- assertInfinite()
- assertInstanceOf()
- assertInternalType()
- assertJsonFileEqualsJsonFile()
- assertJsonStringEqualsJsonFile()
- assertJsonStringEqualsJsonString()
- assertLessThan()
- assertLessThanOrEqual()
- assertNan()
- assertNull()
- assertObjectHasAttribute()
- assertRegExp()
- assertStringMatchesFormat()
- assertStringMatchesFormatFile()
- assertSame()
- assertStringEndsWith()
- assertStringEqualsFile()
- assertStringStartsWith()
- assertThat()
- assertTrue()
- assertXmlFileEqualsXmlFile()
- assertXmlStringEqualsXmlFile()
- assertXmlStringEqualsXmlString()
- B. 标注
- @author
- @after
- @afterClass
- @backupGlobals
- @backupStaticAttributes
- @before
- @beforeClass
- @codeCoverageIgnore*
- @covers
- @coversDefaultClass
- @coversNothing
- @dataProvider
- @depends
- @expectedException
- @expectedExceptionCode
- @expectedExceptionMessage
- @expectedExceptionMessageRegExp
- @group
- @large
- @medium
- @preserveGlobalState
- @requires
- @runTestsInSeparateProcesses
- @runInSeparateProcess
- @small
- @test
- @testdox
- @ticket
- @uses
- C. XML 配置文件
- PHPUnit
- 测试套件
- 分组
- 为代码覆盖率包含或排除文件
- Logging (日志记录)
- 测试监听器
- 设定 PHP INI 设置、常量、全局变量
- 为 Selenium RC 配置浏览器
- D. 升级
- E. 索引
- F. 参考书目
- G. 版权