php 单元测试工具,PHP单元测试工具PHPUnit初体验

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

工作流程如下:

1.设计你的class/API

2.创建测试程序集

3.实现class/API

4.运行测试

5.修正测试失败或错误,回到第4步。

我们来举个例子:

下面是你要测试的class,其中formatn函数一个取任意数字的5位有效数字的函数。

CODE:----------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

CODE:----------testcase.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);

}

}

最后还需要一个运行测试的程序

CODE:----------runtest.php-----------

$suite = new

PHPUnit_TestSuite("foTest");

$result =

PHPUnit::run($suite);

echo

$result->;toString();

?>;

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

php

runtest.php

得到结果如下:

CODE: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,如下:

CODE:        function testFormatn6()

{

$result =

$this->;abc->;formatn("1343");

$expected = "1343";

$this->;assertEquals($expected, $result);

}

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

CODE:TestCase foTest->;testFormatn8() failed:

expected 1343 , actual 134.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值