热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>编程开发>PHP>

什么是PHPUnit

来源: 作者: 时间:2007-11-12 Tag: 点击:


PHPUnit还支持哪些高级功能

   
结合XDebug生成代码覆盖率报告
    如何测试你的测试用例设计,答案是代码覆盖率。代码覆盖率即当你的
一套测试用例执行完毕时,有多少比例的代码分支被覆盖到。
PHPUnit的代码覆盖率报告需要另一个优秀的Extension——XDebug
http://www.xdebug.org)支持。当执行完测试用例后,得出的结果类似
下图:
   
图中绿色高亮的行代表测试用例有覆盖,红色相反。而左边的数字代表
此行代码被执行过几次。
    代码覆盖率报告对指导我们编写测试用例将有极大的帮助,详见
http://www.phpunit.de/pocket_guide/3.2/en/code-coverage-analysis.html 结合Phing完成自动化部署
         Phing(http://www.phing.info/trac/)是一个基于Apache Ant的加
快PHP项目部署的工具。当在一个新环境部署PHP项目时,代码的正确性
不能得到保证,这就需要在部署之前做针对性的测试,只有测试通过整个
过程才能继续。Phing使用XML文件定义部署过程,其中测试部分动作可
以使用PHPUnit完成,下面是一个
示例性的部署文件:
       <?xml version="1.0"?>
<project name="BankAccount" basedir="." default="test">
  <target name="test">
    <phpunit haltonfailure="true" printsummary="true">
      <batchtest>
        <fileset dir=".">
          <include name="*Test.php"/>
        </fileset>
      </batchtest>
    </phpunit>
  </target>
</project>
其中需要部署的模块名为BankAccount,动作为test,使用测试工具
为phpunit,所有的测试用例文件为*Test.php。
   如果一切正常,使用Phing部署后可以得到类似下面的结果:
phing
Buildfile: /home/sb/build.xml
BankAccount > test:
[phpunit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 0.00067 sec
BUILD FINISHED
Total time: 0.0960 seconds
   当然,如果build失败则你应该根据测试失败的提示来debug你的程序。
结合Selenium做大型自动化集成测试
   前述的测试都是单元测试,测试的输入都是基于变量和类,而非基于用
户行为,例如浏览器的点击。在软件工程定义中,集成测试是在单元测试之
后的更高级别的测试,用PHPUnit作基于浏览器的自动化集成测试需要
Selenium的支持。Selenium(http://www.openqa.org/selenium/)是一
个完整基于浏览器做集成测试的框架。它通过在页面中嵌入js来模拟用户
行为。Selenium的经典架构如图:

    可以看出,我们需要一个额外的Selenium Server来负责转发HTTP请求和执行用户动作。除此之外,剩下的就是在利用Selenium RC For PHP编写测试用例。PHPUnit集成了Selenium的API接口,通过直接调用Selenium的API即可完成测试动作和结果验证,一个典型的测试如下:
<?php
set_include_path(get_include_path().PATH_SEPARATOR.'./PEAR/');
require_once 'Testing/Selenium.php';
require_once 'PHPUnit/Framework/TestCase.php';
class GoogleTest extends PHPUnit_Framework_TestCase {
    private $selenium;
    public function setUp() {
        $this->selenium = new Testing_Selenium("*firefox", "http://www.google.com");
        $this->selenium->start();
    }
    public function tearDown() {
        $this->selenium->stop();
    }
    public function testGoogle() {
        $this->selenium->open("/");
        $this->selenium->type("q", "hello world");
        $this->selenium->click("btnG");
        $this->selenium->waitForPageToLoad(10000);
        $this->assertRegExp("/Google Search/", $this->selenium->getTitle());
    }
}
?>
         可以看出,测试用例书写方法并没有很大的区别。在setUp中用指定浏览器打开www.google.com,然后在表单q中提交查询hello world并点击,最后等待页面load完毕后校验新的url中是否包含/Google Search/。
         当然,Selenium还提供了更为丰富的API,例如验证某个表单的值等等。
         
PHPUnit的发展如何
     PHPUnit已经受到了Zend官方和社区的大力支持。最新版本3.1.8已于9月初发布,不仅修正bug,还对mock object,日志和测试用例框架生成做了更进一步的支持。同时,它也将更容易和PHP的其他优秀工具进行整合来完成更为复杂的任务,详见
http://www.phpunit.de/wiki/ChangeLog#PHPUnit3.1.802-Sep-2007
PHPUnit能给我们带来什么
     单元测试在现代软件开发过程中占据着愈发重要的地位,尤其是敏捷开发。所以,高质量的单元测试是保证项目质量的基础。
     单元测试也为以后的开发提供支缓。就算是开发后期,我们也可以轻松的增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样,我们就可以更自由的对程序进行改进。
同时,编写单元测试将使我们从调用者观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。
然后,单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。
最后,自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。即使在利用
如何更高效的利用PHPUnit进行单元测试
     在用PHPUnit做单元测试时,我们可以借鉴先写测试和测试驱动编码的思想,将代码编写的更加模块化,减少耦合,并且以完成实际功能为目标。这样的代码将会有更高的可测性,会大大提高我们的测试效率
RD如何利用PHPUnit

     1 利用PHPUnit进行Debug,完成单元自测
     2 向scm提交测试用例代码并保持同步
     3 获得测试用例的代码覆盖率并规定一个阈值(75%?),低于阈值的测试用例不能通过单元测试
     4 通过QA的反馈改进RD的测试用例
     5 结合Phing在部署新环境时利用PHPUnit验证代码在新环境下的正确性
     6 结合Selenium做大规模的自动化集成测试,提高提测代码质量
     另外,按照软件工程定义的测试用例设计经验,测试代码应该是程序代码量的1.2-1.5倍。虽然初期编写有一定的代价,但和带来的效用还是没有可比性的
QA如何利用PHPUnit


     1 通过阅读RD的测试用例设计来更进一步了解项目设计和功能
     2 通过QA的角度向RD反馈测试用例设计中的缺陷
     4 自行编写测试用例进行测试

 

FROM:百度百科


上一篇:PHP 安全及相关
下一篇:Propel 1.3概述
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表