文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第 10 章 未完成和跳过的测试

第 10 章 未完成和跳过的测试

时间:2008-03-27  来源:hshq_cn

第 10 章 未完成和跳过的测试未完成的测试
      当你在处理一个新的测试用例类时,可能想由编写空测试方法开始,像这样:
public function testSomething()
{
}
以明了要编写哪些测试。空测试方法的问题是PHPUnit框架把它们解释为成功。这个误解导致测试报告实效-你没法判断测试是实际上成功了还是仍未完成。在未实现的测试方法中调用$this->fail()也没有帮助,因为此后测试将被解释为失败。这将同解释未实现的测试为成功一样都是错误的。
   
      如果我们分别将成功的测试和失败的必做绿灯和红灯,我们还需要黄灯标记未完成或未实现的测试。PHPUnit_Framework_IncompleteTest是个标记接口,用于标记当测试结果为未完成或当前未实现时引发的异常。PHPUnit_Framework_IncompleteTestError是该接口的标准实现。
   
      
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#incomplete-and-skipped-tests.incomplete-tests.examples.SampleTest.php]范例 10.1[/url]
先是一个测试用例类,SampleTest,它含有一个测试方法testSomething()。通过在该方法中调用方便的markTestIncomplete()方法(自动引发PHPUnit_Framework_IncompleteTestError异常),我们把这个测试标记为未完成。
   
范例 10.1: 标记测试为未完成
require_once 'PHPUnit/Framework.php';

class SampleTest extends PHPUnit_Framework_TestCase
{
    public function testSomething()
    {
        //可选:随便测试什么都可以。
        $this->assertTrue(TRUE, 'This should already work.');

        // 在这儿停住并将测试标记为未完成。
        $this->markTestIncomplete(
          'This test has not been implemented yet.'
        );
    }
}
?>
      在PHPUnit命令行测试启动器的输出中,未完成的测试由I表示,如下面的例子所示:
   
phpunit --verbose SampleTest
PHPUnit 3.2.10 by Sebastian Bergmann.
SampleTest
I
Time: 0 seconds
There was 1 incomplete test:
1) testSomething(SampleTest)
This test has not been implemented yet.
/home/sb/SampleTest.php:14
OK, but incomplete or skipped tests!
Tests: 1, Incomplete: 1.
      
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#incomplete-and-skipped-tests.incomplete-tests.tables.api]表 10.1[/url]
显示用于将测试标记为未完成的API。
表 10.1. 未完成测试的API
方法含义void markTestIncomplete()标记当前测试为未完成。void markTestIncomplete(string $message)标记当前测试为未完成,同时使用$message作为说明性信息。跳过的测试
特定的环境中并非所有的测试都能运行。考虑个例子,一个具有多个驱动以支持不同数据库系统的数据库提取层。MySQL驱动的测试当然只能在MySQL服务器上运行。
   
      
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#incomplete-and-skipped-tests.skipping-tests.examples.DatabaseTest.php]范例 10.2[/url]
      显示一个测试用例,DatabaseTest,它有个测试方法,testConnection()。在测试用例类的模板方法setUp()中,我们检查MySQLi扩展是否可用,否则使用markTestSkipped()方法跳过测试。
   
范例 10.2: 跳过一个测试
require_once 'PHPUnit/Framework.php';

class DatabaseTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
        if (!extension_loaded('mysqli')) {
            $this->markTestSkipped(
              'The MySQLi extension is not available.'
            );
        }
    }

    public function testConnection()
    {
        // ...
    }
}
?>
      在PHPUnit命令行测试启动器的输出中,未完成的测试由S表示,如下面的例子所示:
   
phpunit --verbose DatabaseTest
PHPUnit 3.2.10 by Sebastian Bergmann.
DatabaseTest
S
Time: 0 seconds
There was 1 skipped test:
1) testConnection(DatabaseTest)
The MySQLi extension is not available.
/home/sb/DatabaseTest.php:11
OK, but incomplete or skipped tests!
Tests: 1, Skipped: 1.
      
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#incomplete-and-skipped-tests.skipped-tests.tables.api]表 10.2[/url]
      显示用于跳过测试的API。
   
表 10.2. 用于跳过测试的API
方法含义void markTestSkipped()标记当前测试为要跳过的。void markTestSkipped(string $message)标记当前测试为要跳过的,同时用$message作为说明性信息。
               
               
               

相关阅读 更多 +
排行榜 更多 +
吹风机射击 v1.0 安卓版

吹风机射击 v1.0 安卓版

飞行射击 下载
吹风机射击 v1.0 安卓版

吹风机射击 v1.0 安卓版

飞行射击 下载
吹风机射击 v1.0 安卓版

吹风机射击 v1.0 安卓版

飞行射击 下载