- 论坛徽章:
- 0
|
PHP单元测试工具PHPUnit初体验
z33 <newbdez33 at gmail.com>;
PHP开发: http://newbdez33.blogspot.com/
2005.10.27
今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了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
最后还需要一个运行测试的程序
- ----------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.
复制代码
[ 本帖最后由 z33 于 2009-6-13 17:37 编辑 ] |
|