phpunit入门基础

发表于:2009-03-30来源:作者:点击数: 标签:PHPUnitphpunit入门
什么是 PHPUnit PHPUnit是一个轻量级的PHP 测试框架 。它是在 PHP 5下面对 JUnit 3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计) 单元测试是几个现代 敏捷 开发 方法的基础,使得PHPUnit成为许多大型PHP项目的关键工具

什么是PHPUnit  

PHPUnit是一个轻量级的PHP测试框架。它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计)
  单元测试是几个现代敏捷开发方法的基础,使得PHPUnit成为许多大型PHP项目的关键工具。这个工具也可以被Xdebug扩展用来生成代码覆盖率报告 ,并且可以与phing集成来自动测试,最合它还可以和Selenium整合来完成大型的自动化集成测试。 [编辑本段]如何部署PHPUnit  方法一 使用Pear
  运行 pear channel-discover pear.phpunit.de;
  pear install phpunit/PHPUnit
  方法二 手动安装
  1 从http://pear.phpunit.de/get/下载软件包并解压
  2 把解压后的目录加入php.ini中的include_path
  3 将脚本pear-phpunit改名为phpunit
  4 将phpunit脚本中的@php_bin@替换成php可执行脚本的路径
  5 为phpunit脚本增加可执行权限并加入$PATH
  6 将PHPUnit/Runner/Version.php中的@package_version@替换成3位
  PHPUnit版本号 [编辑本段]下面的例子用来测试sizeof函数工作的正确性  <?php 鼠标
  require_once 'PHPUnit/Framework.php';
  class ArrayTest extends PHPUnit_Framework_TestCase {
  public function testNewArrayIsEmpty() {
  /*Create the Array fixture*/
  $fixture = array();
  /* Assert that the size of the Array * fixture is 0*/
  $this->assertEquals(0, sizeof($fixture));
  }
  public function testArrayContainsAnElement() {
  /* Create the Array fixture*/
  $fixture = array();
  /*Add an element to the Array * fixture*/
  $fixture[] = 'Element';
  /*Assert that the size of the * Array fixture is 1*/
  $this->assertEquals(1, sizeof($fixture));
  }
  }
  ?>
  要点:
  1 编写的测试用例是一个php脚本
  2 require_once 'PHPUnit/Framework.php'是必须的,另外,你需要在测
  试用例脚本中包含你需要测试的代码
  3 测试用例的主体必须写在类中,类名必须和文件名保持一致,还必须是
  PHPUnit_Framework_TestCase的子类
  4 每一个测试用例都是一个public的成员函数,必须以test开头
  5 程序的输出使用assert*系列函数来进行验证
  该用例需要在Shell下键入phpunit ArrayTest.php来运行。结果如下示:
  [username@machine xx]$ phpunit ArrayTest.php
  PHPUnit 3.1.3 by Sebastian Bergmann.
  ..
  Time: 0 seconds
  OK (2 tests)
  结果中最重要的用红色标出的结果,点号 代表一个用例通过(即assert系列函数都通过)。如果将上面的测试用例testArrayContainsAnElement用例assertEquals函数中的1改为0,则运行结果为:
  PHPUnit 3.1.3 by Sebastian Bergmann.
  .F
  Time: 0 seconds
  There was 1 failure:
  1) testArrayContainsAnElement(ArrayTest)
  Failed asserting that <integer:1> matches expected value <integer:0>.
  /home/wiki/apache/htdocs1.5.0/ArrayTest.php:29
  FAILURES!
  Tests: 2, Failures: 1.
  可以很明显看出结果由原来的 .. 变为 .F ,F表示第二个测试用例未通
  过,并且具体与哪一条验证不符都在后有详细说明。
  除了F外,一个测试用例还有I(未完成),S (跳过),E (错误)三种状态,详见http://www.phpunit.de/pocket_guide/3.2/en/textui.html [编辑本段]PHPUnit如何保证测试的准确性  测试用例之间必须保证他们之间是不互相影响的,即这些测试用例无论以任何顺序执行,他们的结果都应该一样。PHPUnit提供了两个可供重写的函数来满足此要求。
  成员函数setUp在每一个测试用例开始之前执行,用来创建用于测试的环境。tearDown则在每个测试用例结束时调用,用于还原测试用例对环境带来的影响。
  上示的测试用例中$fixture = array()就可以放在setUp中完成 [编辑本段]PHPUnit还支持哪些高级功能  结合XDebug生成代码覆盖率报告
  如何测试你的测试用例设计,答案是代码覆盖率。代码覆盖率即当你的
  一套测试用例执行完毕时,有多少比例的代码分支被覆盖到。
  PHPUnit的代码覆盖率报告需要另一个优秀的Extension——XDebug
  (http://www.xdebug.org )支持。当执行完测试用例后,得出的结果类似

原文转自:http://www.ltesting.net