跳过测试

最后更新于:2022-04-01 03:45:21

# 跳过测试 并非所有测试都能在任何环境中运行。比如说,考虑这样一种情况:一个数据库抽象层,针对其所支持的各种数据库系统有多个不同的驱动程序。针对 MySQL 驱动程序的测试当然只在 MySQL 服务器可用才能运行。 [Example 7.2, “跳过某个测试”](# "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”](# "Table 7.2. 用于跳过测试的 API")列举了用于跳过测试的 API。 **Table 7.2. 用于跳过测试的 API** | 方法 | 含义 | |-----|-----| | `void markTestSkipped()` | 将当前测试标记为已跳过。 | | `void markTestSkipped(string $message)` | 将当前测试标记为已跳过,并用 `$message` 作为说明信息。 |
';