PHP单元测试工具PHPUnit初体验

转载 2006年05月24日 08:39:00
PHP单元测试工具PHPUnit初体验


今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了PHP的单元测试工具PHPUnit,所以写个文档备查。

看了PHPUnit的文档之后基本有了一些了解,
http://pear.php.net/manual/en/packages.php.phpunit.intro.php

工作流程如下:
1.设计你的class/API
2.创建测试程序集
3.实现class/API
4.运行测试
5.修正测试失败或错误,回到第4步。

我们来举个例子:
下面是你要测试的class,其中formatn函数一个取任意数字的5位有效数字的函数。
----------format_number.php-----------

class fo {

function fo() {
}

function formatn($num) {
$num = rtrim($num,"0");
$pos = strpos($num,".");
$num = str_replace(".","",$num);
$count1 = strlen($num);
$num = ltrim($num,"0");
$count2 = strlen($num);
$zeroc = $count1 - $count2;
$num = substr($num,0,6);
$num = round($num/10);
//$num = str_pad($num, 5, "0");
if ($pos !== false) {
$num = str_pad($num, (strlen($num)+$zeroc), "0", STR_PAD_LEFT);
$dotl = substr($num,0,$pos);
$dotr = substr($num,$pos);
$num = $dotl.".".$dotr;
}
return $num;
}

}



接着创建TestCase,继承自PHPUnit_TestCase
----------testcase.php-----------

<?php

require_once 'format_number.php';
require_once 'PHPUnit.php';

class foTest extends PHPUnit_TestCase {

//这个成员变量是存放要测试的类引用
var $abc;

//构造函数
function foTest($name) {
$this->;PHPUnit_TestCase($name);
}

//new一个要测试的类为成员变量abc赋值
function setUp() {
$this->;abc = new fo;
}

//unset要测试的类
function tearDown() {
unset($this->;abc);
}

//自定义的testcase
function testFormatn1() {
//调用要测试的类的方法,结果放到$result变量
$result = $this->;abc->;formatn("100.234");
//期望结果
$expected = "100.23";
//判断是否相等,这里使用assertTrue方法来判断布而值是否为true。
$this->;assertTrue($result == $expected);
}

function testFormatn2() {
$result = $this->;abc->;formatn("0.100234");
$expected = "0.10023";
$this->;assertTrue($result == $expected);
}

function testFormatn3() {
$result = $this->;abc->;formatn("0.100235");
$expected = "0.10024";
$this->;assertTrue($result == $expected);
}

function testFormatn4() {
$result = $this->;abc->;formatn("0.000100235");
$expected = "0.00010024";
$this->;assertTrue($result == $expected);
}

function testFormatn5() {
$result = $this->;abc->;formatn("0.000100232");
$expected = "0.00010023";
$this->;assertTrue($result == $expected);
}

function testFormatn6() {
$result = $this->;abc->;formatn("1343");
$expected = "1343";
$this->;assertTrue($result == $expected);
}

function testFormatn7() {
$result = $this->;abc->;formatn("1343.01");
$expected = "1343";
$this->;assertTrue($result == $expected);
}

function testFormatn8() {
$result = $this->;abc->;formatn("1343.05");
$expected = "1343.1";
$this->;assertTrue($result == $expected);
}

function testFormatn9() {
$result = $this->;abc->;formatn("0");
$expected = "0";
$this->;assertTrue($result == $expected);
}

function testFormatn10() {
$result = $this->;abc->;formatn("105.2342");
$expected = "105.23";
$this->;assertTrue($result == $expected);
}

function testFormatn11() {
$result = $this->;abc->;formatn("105.2375");
$expected = "105.24";
$this->;assertTrue($result == $expected);
}

function testFormatn12() {
$result = $this->;abc->;formatn("0.000523751");
$expected = "0.00052375";
$this->;assertTrue($result == $expected);
}

function testFormatn13() {
$result = $this->;abc->;formatn("0.000523755");
$expected = "0.00052376";
$this->;assertTrue($result == $expected);
}

}


最后还需要一个运行测试的程序
----------runtest.php-----------

<?php
require_once 'testcase.php';
require_once 'PHPUnit.php';

$suite = new PHPUnit_TestSuite("foTest");
$result = PHPUnit::run($suite);

echo $result->;toString();
?>;



现在就可以通过命令行运行这个testcase
php runtest.php

得到结果如下:
TestCase foTest->;testFormatn1() passed

TestCase foTest->;testFormatn2() passed
TestCase foTest->;testFormatn3() passed
TestCase foTest->;testFormatn4() passed
TestCase foTest->;testFormatn5() passed
TestCase foTest->;testFormatn7() passed
TestCase foTest->;testFormatn8() passed
TestCase foTest->;testFormatn9() passed
TestCase foTest->;testFormatn10() passed
TestCase foTest->;testFormatn11() passed
TestCase foTest->;testFormatn12() passed
TestCase foTest->;testFormatn13() passed
TestCase foTest->;testFormatn6() failed: expected TRUE, actual FALSE


其中testFormatn6的测试失败,
我们就可以去检查一下我们的代码在什么地方出问题了。


补充一点
也可以把assertTrue方法换assertEquals,如下:

function testFormatn6() {
$result = $this->;abc->;formatn("1343");
$expected = "1343";
$this->;assertEquals($expected, $result);
}


如果失败得到对应的结果会直观一些(可以显示错误的结果):

TestCase foTest->;testFormatn8() failed: expected 1343 , actual 134.

相关文章推荐

体验PHP下的单元测试工具:PHPUnit

今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了PHP的单元测试工具PHPUnit,所以写个文档备查。     工作流程如下: ...

c++单元测试工具unittest++使用小结

UnitTest++是一个C++的单元测试工具,这个工具小巧,使用简单.测试结果支持输出到屏幕和保存成xml文件. 这个项目的地址是:http://unittest-cpp.sourceforge....

C语言单元测试工具Check使用注意事项

最近在项目中尝试去向TDD的开发方式靠近,因此接触倒了C语言的单元测试工具Check,模拟Java的JUnit编写而成,功能简单实用,Manual手册就短短两页,在SO上的人气也挺高。 不过也有可能...

Web Service单元测试工具实例介绍之SoapUI

SoapUI 是当前比较简单实用的开源Web Service 测试工具,提供桌面应用程序和IDE 插 件程序两种使用方式。能够快速构建项目和组织测试用例是该工具的一大特性,下面将通过实例介绍如果使用S...

31.Python的单元测试工具——doctest

python的一个内建的轻量化单元测试工具doctest,看完本文后,可以完成工作中的简单的单元测试工作。

java单元测试工具JUnit4

引言 毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果。单元测试正是验证代码行为是否满足预期的有效手段之一。但不可否认,做测试是件...

Web Service单元测试工具实例介绍之SoapUI

SoapUI 是当前比较简单实用的开源Web Service 测试工具,提供桌面应用程序和IDE 插 件程序两种使用方式。能够快速构建项目和组织测试用例是该工具的一大特性,下面将通过实例介绍如果使用S...
  • wyqlxy
  • wyqlxy
  • 2012-09-29 10:14
  • 1266

React实战-React标配单元测试工具Jest

React实战-React标配单元测试工具Jest 目前Javascript的测试工具很多,但是针对React的测试策略,Facebook推出的ReactJs标配测试工具是Jest.Jest的官网地...

Web Service单元测试工具实例介绍之SoapUI

本文转载自:http://blog.csdn.net/oracle_microsoft/article/details/5689585 SoapUI 是当前比较简单实用的开源Web Serv...

Java单元测试工具:JUnit4(一)——概述及简单例子

1.概述 1.1 什么是JUnit ①JUnit是用于编写可复用测试集的简单框架,是xUnit的一个子集。xUnit是一套基于测试驱动开发的测试框架,有PythonUnit、Cpp...
  • Zen99T
  • Zen99T
  • 2016-01-30 19:54
  • 7271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)