跳过测试
跳过测试
并非所有测试都能在任何环境中运行。比如说,考虑这样一种情况:一个数据库抽象层,针对其所支持的各种数据库系统有多个不同的驱动程序。针对 MySQL 驱动程序的测试当然只在 MySQL 服务器可用才能运行。
Example 7.2, “跳过某个测试” 展示了一个测试用例类 DatabaseTest
,它有一个测试方法 testConnection()
。在测试用例类的 setUp()
模板方法中,检查了 MySQLi 扩展是否可用,并且在扩展不可用时用 markTestSkipped()
方法来跳过此测试。
Example 7.2. 跳过某个测试
<?php
class DatabaseTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
if (!extension_loaded('mysqli')) {
$this->markTestSkipped(
'The MySQLi 扩展不可用。'
);
}
}
public function testConnection()
{
// ...
}
}
?>
在 PHPUnit 命令行测试执行器的输出中,被跳过的测试记为 S
,如下例所示:
phpunit --verbose DatabaseTest
PHPUnit 5.0.0 by Sebastian Bergmann and contributors.
S
Time: 0 seconds, Memory: 3.95Mb
There was 1 skipped test:
1) DatabaseTest::testConnection
The MySQLi extension is not available.
/home/sb/DatabaseTest.php:9
OK, but incomplete or skipped tests!
Tests: 1, Assertions: 0, Skipped: 1.
Table 7.2, “用于跳过测试的 API”列举了用于跳过测试的 API。
Table 7.2. 用于跳过测试的 API
方法 | 含义 |
---|---|
void markTestSkipped() |
将当前测试标记为已跳过。 |
void markTestSkipped(string $message) |
将当前测试标记为已跳过,并用 $message 作为说明信息。 |