PHP单元测试利器 PHPUNIT初探第1/2页

   2015-11-15 0
核心提示:你是否在程序开发的过程中遇到以下的情况:当你花了很长的时间开发一个应用后,你认为应该是大功告成了,可惜在调试的时候,老是不断的发现bug,而且最可怕的是,这些bug是重复出现的,你可能发现这些bug之间会有关联,但却老是找不到问题的所在。
当你遇到以上这些令你沮丧的情况时,你一定会想能有什么更好的办法去解决呢?办法当然是有的!这就是使用单元测试。单元测试不但可以在一定程度上解决上述头疼的问题,而且能让代码变的容易维护,还可以能让你更多地对代码进行重构。

  一旦你编写好单元测试用例,当你需要修改你的代码时,你要做的事情就是重新运行你的单元测试用例并观察这些单元测试用例能否通过,如果通过了的话,证明代码是没问题的。

  人们往往会说:既然单元测试这么好,为什么那么多人还是不大愿意去写单元测试呢?有以下几种理解上的误曲:

  1、认为编写单元测试太浪费时间。虽然目前很多IDE工具都为编写单元测试建立好了框架,但还是要开发者编写一些单元测试的代码的。就象很多开发中的最佳实践一样,用正确的方法去做正确的事情会为开发节省大量的时间。每当新增加新功能时,你可能通过访问你的网页到处去点击手动测试,而运行建立好的单元测试用例其速度其实比通过手工去测试的速度更快。

  2、认为既然代码能运行了,不需要再编写单元测试。但假设团队中有新的成员,如果没有良好的单元测试用例,新成员很有可能随意地去编码而不考虑各种后果。如果有编写良好的单元测试,在程序运行时进行各种测试,则能最大程度避免bug的产生。

  3、认为编写单元测试代码枯燥无味。程序员的天性是解决问题,而很多程序员认为在紧张的编码工作时,还要编写单元测试代码,会很枯燥。但要知道的是,如果能通过编写单元测试在很早的阶段就能尽可能发现代码中多的错误的话,那么既节省时间减少了出错,何乐而不为?

  开始动手安装phpunit

  本文中将通过介绍php中的单元测试利器phpunit(http://phpunit.de/),并通过实际例子来讲解如何在实际工作中运用phpunit。首先安装phpunit的方法可以通过php下的pear去安装:

PHP单元测试利器 PHPUNIT初探第1/2页  pear channel-discover pear.phpunit.de
PHP单元测试利器 PHPUNIT初探第1/2页  pear channel
-discover components.ez.no
PHP单元测试利器 PHPUNIT初探第1/2页  pear channel
-discover pear.symfony-project.com
PHP单元测试利器 PHPUNIT初探第1/2页    pear install phpunit
/PHPUnit

  如果你想通过手动方式去安装,可以参考phpunit的手册去安装(http://www.phpunit.de/manual/3.0/en/installation.html)。

  编写第一个单元测试用例

  下面我们开始编写第一个单元测试用例。在编写测试用例时,要遵守如下的phpunit的规则:

  1 一般地,在测试用例中,可以扩展PHPUnit_Framework_TestCase类,这样就可以使用象setUp(),tearDown()等方法了。

  2 测试用例的名字最好是使用约定俗成的格式,即在被测试类的后面加上”Test”,比如要测试的类为RemoteConnect,则测试用例的命名为RemoteConnectTest。

  3 在一个测试用例中的所有的测试方法,在命名时都应该以test+测试方法名去命名,如testDoesLikeWaffles(),要注意的是该方法必须是声明为public类型的。当然可以在你的测试用例中包含private的方法,但它们不能被phpunit所调用。

  4 测试方法中是不能接收参数的。

  下面首先举个简单的例子,代码如下:

PHP单元测试利器 PHPUNIT初探第1/2页<?php
PHP单元测试利器 PHPUNIT初探第1/2页
class RemoteConnect
PHP单元测试利器 PHPUNIT初探第1/2页{
PHP单元测试利器 PHPUNIT初探第1/2页  
public function connectToServer($serverName=null)
PHP单元测试利器 PHPUNIT初探第1/2页  {
PHP单元测试利器 PHPUNIT初探第1/2页    
if($serverName==null){
PHP单元测试利器 PHPUNIT初探第1/2页      
throw new Exception(“That's not a server name!”);
PHP单元测试利器 PHPUNIT初探第1/2页    }
PHP单元测试利器 PHPUNIT初探第1/2页    $fp = fsockopen($serverName,80);
PHP单元测试利器 PHPUNIT初探第1/2页    return ($fp) ? true : false;
PHP单元测试利器 PHPUNIT初探第1/2页  }
PHP单元测试利器 PHPUNIT初探第1/2页  public function returnSampleObject()
PHP单元测试利器 PHPUNIT初探第1/2页  {
PHP单元测试利器 PHPUNIT初探第1/2页    return $this;
PHP单元测试利器 PHPUNIT初探第1/2页  }
PHP单元测试利器 PHPUNIT初探第1/2页}
PHP单元测试利器 PHPUNIT初探第1/2页?>

   上面的代码其实是实现连接到一个指定的服务器的功能,那么我们可以编写测试代码如下:

PHP单元测试利器 PHPUNIT初探第1/2页<?php
PHP单元测试利器 PHPUNIT初探第1/2页
require_once('RemoteConnect.php');
PHP单元测试利器 PHPUNIT初探第1/2页
class RemoteConnectTest extends PHPUnit_Framework_TestCase
PHP单元测试利器 PHPUNIT初探第1/2页{
PHP单元测试利器 PHPUNIT初探第1/2页  
public function setUp(){ }
PHP单元测试利器 PHPUNIT初探第1/2页  
public function tearDown(){ }
PHP单元测试利器 PHPUNIT初探第1/2页  
public function testConnectionIsValid()
PHP单元测试利器 PHPUNIT初探第1/2页  {
PHP单元测试利器 PHPUNIT初探第1/2页    
// test to ensure that the object from an fsockopen is valid
PHP单元测试利器 PHPUNIT初探第1/2页
    $connObj = new RemoteConnect();
PHP单元测试利器 PHPUNIT初探第1/2页    
$serverName = 'www.google.com';
PHP单元测试利器 PHPUNIT初探第1/2页    
$this->assertTrue($connObj->connectToServer($serverName) !== false);
PHP单元测试利器 PHPUNIT初探第1/2页  }
PHP单元测试利器 PHPUNIT初探第1/2页}
PHP单元测试利器 PHPUNIT初探第1/2页
?>

   在上面的代码中,由于继承了PHPUnit_Framework_TestCase类,因此在setUp和tearDown方法中,不需要编写任何代码。SetUp方法是在每个测试用例运行前进行一些初始化的工作,而tearDown则在每个测试用例运行后进行一些比如资源的释放等工作。在测试方法中,通过使用phpunit的断言assertTrue去判断所返回的布尔值是否为真,这里是通过调用RemoteConnect.php中的connectToServe方法去判断能否连接上服务器。

 
标签: PHPUNIT
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • PHPUnit 5.7.9 发布,PHP 单元测试框架
    PHPUnit 5.7.9 发布,PHP 单元测试框架
    PHPUnit 5.7.9 发布,PHP 单元测试框架王练 发布于2017年02月03日 收藏 0 MongoDB漏洞是什么?应该如何防护? PHPUnit 5.7.9发布了,PHPUnit是面向 PHP 的测试框架,是单元测试框架xUnit 的一个实例。 更新内容:修复:Reverted backwards incompatible chang
  • PHPUnit 6.0.3 和 5.7.10 发布,PHP 单元测试框架
    PHPUnit 6.0.3 和 5.7.10 发布,PHP 单元测试框
    PHPUnit 6.0.3 和 5.7.10 发布,PHP 单元测试框架王练 发布于2017年02月05日 收藏 0 MongoDB漏洞是什么?应该如何防护? PHPUnit 6.0.3和 5.7.10 发布了,PHPUnit是面向 PHP 的测试框架,是单元测试框架xUnit 的一个实例。 6.0.3 更新内容: Fixed #2460 : 更
  • PHPUnit入门基础教程
    PHPUnit入门基础教程
    PHPUnit是PHP语言的单元测试框架、工具,xunit单元测试工具系列成员之一,可以单独运行在Linux或windows系统下面,也可以集成到zend studio等IDE工具中。 工具下载: https://phpunit.de/index.html在线手册: https://phpunit.de/manual/4.6/zh_cn/index.htm
    02-05 PHPUnit
  • 组合使用Laravel和vfsStream测试文件上传
    核心要点 在应用开发中,测试是很重要的,在诸多的开发工具中,测试驱动开发是很伟大的一项; 测试文件上传并不像人们想象的那么简单; 目前,有很多很棒,但不为大家所熟知的测试工具; Larval能够让请求的校验更容易; 测试并不需要实际的文件系统,因为如
  • 如何使用 PHPUnit 測試 private 與 protected method?
    如何使用 PHPUnit 測試 private 與 protected m
    剛開始學習寫測試時,最多人的疑問就是該如何測試 private 與 protected method?,理論上不該去測試 private 與 protected ,本文會介紹一個 PHP 邪惡的技巧來完成測試,但建議除非萬不得已,不要使用此方法。 Motivation 在 PHPConf 第二天的 workshop,我曾
    11-22 PHPUnit
  • 如何使用 PHPUnit mock Closure?
    如何使用 PHPUnit mock Closure?
    若有需求需要抽換,物件導向編程教我們的是開 interface 達成解耦合,然後使用依賴注入,最後達成依賴反轉目標,隨著函數式編程越來越流行,函數式編程教我們將 closure 當成參數傳進函式,一樣可以解耦合與依賴反轉,尤其對於只使用一次的需求特別有效,不用
    11-22 PHPUnit
  • Phpstorm配置phpunit对php进行单元测试
    Phpstorm配置phpunit对php进行单元测试
    在 phpstorm 中配置 php 项目的单元测试,项目使用 Composer 进行管理,为了避免在项目中直接引入 phpunit 相关代码包,使项目的 vendor 目录变得臃肿,这里采用全局安装方式安装了 phpunit 代码包。 composer global require phpunit/phpunit=5.0.* 安装完成
  • PhpStorm 10 发布,PHP 7 和 PHPUnit 5 支持
    PhpStorm 10 发布,PHP 7 和 PHPUnit 5 支持
    PhpStorm 10 正式版发布 下载 ,此版本最主要的是 PHP 语言支持,编辑体验改进,调试器改进,代码分析改进和其他强大的新特性。 改进列表:PHP 语言和编辑体验:PHP 7支持 (including PHP 7 compatibility inspections),改进代码完成功能 新调试体验:PHP 交
  • PHP单元测试利器 PHPUNIT深入用法(二)第1/2页
    PHP单元测试利器 PHPUNIT深入用法(二)第1/2页
    在上一篇PHP单元测试利器:PHPUNIT初探文章中,我们对phpunit有了一个初步的认识,在本文中将继续深入讲解下phpunit中的一些用法。
  • PHPUnit PHP测试框架安装方法
    PHPUnit是一个轻量级的PHP测试框架。它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计)。
点击排行