牛骨文教育服务平台(让学习变的简单)

未完成的测试

开始写新的测试用例类时,可能想从写下空测试方法开始,比如:

public function testSomething()
{
}

以此来跟踪需要编写的测试。空测试的问题是 PHPUnit 框架会将它们解读为成功。这种错误解读导致错误报告变得毫无用处——无法分辨出测试是真的成功了还是根本就未编写实现。在未实现的测试中调用 $this->fail() 同样没啥帮助,因为测试将被解读为失败。这和将未实现的测试解读为成功是一样的错误。

假如把成功的测试视为绿灯、测试失败视为红灯,那么还额外需要黄灯来将测试标记为未完成或尚未实现。PHPUnit_Framework_IncompleteTest 是一个标记接口,用于将测试方法抛出的异常标记为测试未完成或目前尚未实现而导致的结果。PHPUnit_Framework_IncompleteTestError 是这个界面的标准实现。

Example 7.1, “将测试标记为未完成”展示了一个测试用例类 SampleTest,它有一个测试方法 testSomething()。通过在测试方法中调用便捷方法 markTestIncomplete()(会自动抛出一个 PHPUnit_Framework_IncompleteTestError 异常)将这个测试标记为未完成。

Example 7.1. 将测试标记为未完成

<?php
class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        // 可选:如果愿意,在这里随便测试点什么。
        $this->assertTrue(TRUE, "这应该已经是能正常工作的。");

        // 在这里停止,并将此测试标记为未完成。
        $this->markTestIncomplete(
          "此测试目前尚未实现。"
        );
    }
}
?>

在 PHPUnit 命令行测试执行器的输出中,未完成的测试记为 I,如下例所示:

phpunit --verbose SampleTest

PHPUnit 5.0.0 by Sebastian Bergmann and contributors.

I

Time: 0 seconds, Memory: 3.95Mb

There was 1 incomplete test:

1) SampleTest::testSomething
This test has not been implemented yet.

/home/sb/SampleTest.php:12
OK, but incomplete or skipped tests!
Tests: 1, Assertions: 1, Incomplete: 1.

Table 7.1, “用于未完成的测试的 API”列举了用于将测试标记为未完成的 API。

Table 7.1. 用于未完成的测试的 API

方法 含义
void markTestIncomplete() 将当前测试标记为未完成。
void markTestIncomplete(string $message) 将当前测试标记为未完成,并用 $message 作为说明信息。