51Testing软件测试网
  • 软件测试门户
  • 软件测试培训
  • 文章资料精选
  • 软件测试论坛
  • 软件测试博客
  • 测试招聘求职

  • 老版网站
  • 加入收藏
  • 关于我们

  • 行业资讯
  • 业务知识
  • 软件测试技术
  • 软件测试工具
  • 软件测试管理
  • 软件开发专栏
  • 软件测试下载
  • 软件测试杂志
  • 软件测试沙龙
您的位置: 首页 >> 文章 >> 软件测试技术 >> 单元测试 >> 精选文章

月度热点

单元测试的重要性
集成测试与单元测试的联系
浅析-Mockrunner测试框架
如何使用CppUnit进行单元测试
什么是桩和驱动
桩模块和驱动模块的编写

最新更新

集成测试与单元测试的联系
单元测试的重要性
桩模块和驱动模块的编写
什么是桩和驱动
如何使用CppUnit进行单元测试
浅析-Mockrunner测试框架
JUnit单元测试
深入-EasyMock应用
如何使用VSTS写单元测试
再谈单元测试

相关阅读

51Testing丛书连载:(一) 互联网单元测试及实践
Silverlight 2单元测试框架
我的“单元测试”跟你的是两码事!
51Testing系列丛书:互联网单元测试及实践
单元测试基础知识
EasyMock使单元测试更加容易
不仅仅只有JUnit
单元测试的规划
单元测试

利用单元测试检查PHP代码

发布时间: 2008-7-03 13:09    作者: 未知    来源: 网络转载

字体:  小  中  大  | 上一篇 下一篇 | 打印  | 我要投稿  | 每周一问,答贴有奖

        测试驱动的开发和单元测试是确保代码在经过修改和重大调整之后依然能如我们期望的一样工作的最新方法。在本文中,您将学习到如何在模块、数据库和用户界面(UI)层对自己的 PHP 代码进行单元测试。

        Web 应用程序是 24x7 不间断运行的,因此我的程序是否还在运行这个问题会在晚上一直困扰我。单元测试已经帮我对自己的代码建立了足够的信心 —— 这样我就可以安稳地睡个好觉了。

        单元测试 是一个为代码编写测试用例并自动运行这些测试的框架。测试驱动的开发 是一种单元测试方法,其思想是应该首先编写测试程序,并验证这些测试可以发现错误,然后才开始编写需要通过这些测试的代码。当所有测试都通过时,我们开发的特性也就完成了。这些单元测试的价值是我们可以随时运行它们 —— 在签入代码之前,重大修改之后,或者部署到正在运行的系统之后都可以。

        PHP 单元测试

        对于 PHP 来说,单元测试框架是 PHPUnit2。可以使用 PEAR 命令行作为一个 PEAR 模块来安装这个系统:% pear install PHPUnit2。

        在安装这个框架之后,可以通过创建派生于 PHPUnit2_Framework_TestCase 的测试类来编写单元测试。

        模块单元测试

        我发现开始单元测试最好的地方是在应用程序的业务逻辑模块中。我使用了一个简单的例子:这是一个对两个数字进行求和的函数。为了开始测试,我们首先编写测试用例,如下所示。

        清单 1. TestAdd.php
         <?php
        require_once 'Add.php';
        require_once 'PHPUnit2/Framework/TestCase.php';
        class TestAdd extends PHPUnit2_Framework_TestCase
        {
            function test1() { $this->assertTrue( add( 1, 2 ) == 3 ); }
            function test2() { $this->assertTrue( add( 1, 1 ) == 2 ); }
        }
        ?>

        这个 TestAdd 类有两个方法,都使用了 test 前缀。每个方法都定义了一个测试,这个测试可以与清单 1 一样简单,也可以十分复杂。在本例中,我们在第一个测试中只是简单地断定 1 加 2 等于 3,在第二个测试中是 1 加 1 等于 2。

        PHPUnit2 系统定义了 assertTrue() 方法,它用来测试参数中包含的条件值是否为真。然后,我们又编写了 Add.php 模块,最初让它产生错误的结果。

        清单 2. Add.php
         <?php
            function add( $a, $b ) { return 0; }
        ?>

        现在运行单元测试时,这两个测试都会失败。

        清单 3. 测试失败
         % phpunit TestAdd.php
        PHPUnit 2.2.1 by Sebastian Bergmann.
        FF
        Time: 0.0031270980834961
        There were 2 failures:
        1) test1(TestAdd)
        2) test2(TestAdd)
        FAILURES!!!
        Tests run: 2, Failures: 2, Errors: 0, Incomplete Tests: 0.

        现在我知道这两个测试都可以正常工作了。因此,可以修改 add() 函数来真正地做实际的事情了。
         <?php
            function add( $a, $b ) { return $a+$b; }
        ?>

        现在这两个测试都可以通过了。

        清单 4. 测试通过
         % phpunit TestAdd.php
        PHPUnit 2.2.1 by Sebastian Bergmann.
        ..
        Time: 0.0023679733276367
        OK (2 tests)
        %

        尽管这个测试驱动开发的例子非常简单,但是我们可以从中体会到它的思想。我们首先创建了测试用例,并且有足够多的代码让这个测试运行起来,不过结果是错误的。然后我们验证测试的确是失败的,接着实现了实际的代码使这个测试能够通过。

        我发现在实现代码时我会一直不断地添加代码,直到拥有一个覆盖所有代码路径的完整测试为止。在本文的最后,您会看到有关编写什么测试和如何编写这些测试的一些建议。



TAG: 单元测试
软件测试技术
31/3123>

查看全部评论(0)我来说两句

-5 -3 -1 - +1 +3 +5

51Testing软件测试网 | 快捷面板 | 站点地图 | 联系我们 | 广告服务

建议使用IE 5.0以上浏览器,800×600以上分辨率,常年法律顾问:商建刚律师
版权所有 51testing软件测试网 Copyright@51testing.com 2003-2008, 沪ICP备05003035号
意见反馈及技术支持:webmaster@51testing.com 业务联系:service@51testing.com 电话:021-64471599