`

php_unit___转转转转

    博客分类:
  • php
阅读更多

今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了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位有效数字的函数。

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-----------
<?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-----------
<?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

得到结果如下:

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.
分享到:
评论

相关推荐

    PHP实现图片转PDF

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;SetCreator(PDF_CREATOR); $pdf-&gt;SetTitle('图片转PDF示例'); // 添加页面 $pdf-&gt;AddPage(); // 将图片...

    intact-case-js-:Java库,用于自然地互转换camelCase和snake_case,包括首字母缩写词

    php__unit getUTCDay get_utc__day 该库可以相互转换camelCase | StudlyCaps和火车案例。 camelCase / StudlyCaps 火车箱 勿忘我 勿忘我 WebkitFlexDirection -webkit-flex-direction 用法 这是完整案例的...

    unit-converter:转换单位

    "unit-converter"是一个专为PHP开发的工具,主要用于进行各种物理量单位之间的转换。这个库的使用简单高效,尤其适合在PHP 5.4及更高版本中使用,它能够帮助开发者快速、准确地处理涉及不同单位的计算任务。下面我们...

    unit_conversions:一个很棒的软件包,可以用PHP执行单位转换

    composer require mightymango/unit_conversions 用法 $ unit_conversions = new Mightymango \ UnitConversions (); echo $ unit_conversions -&gt; echoPhrase ( 'Hello, Simon!' ); 测验 composer test 变更日志 ...

    html转为pdf导出.zip

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;SetCreator(PDF_CREATOR); $pdf-&gt;SetAuthor('Your Name'); $pdf-&gt;SetTitle('HTML转PDF示例'); $pdf-&gt;SetSubject...

    php封装好的人民币数值转中文大写类

    php封装好的人民币数值转中文大写类 class Num2RmbClass{ /** * 人民币数值转中文大写 * @author SunsCheung * @time 2015.11.11 * @param string $number 数值 默认为0 * @param string $int_unit 币种单位...

    php-conversion测量单位间转换的PHP库.zip

    use Crisu83\Conversion\Quantity\DigitalInformation\Unit as DIUnit; use Crisu83\Conversion\Size\HatSize\System as HatSizeSystem; use Crisu83\Conversion\Size\ShoeSize\System as ShoeSizeSystem...

    php生成文件类型

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;AddPage(); $pdf-&gt;writeHTMLCell(0, 0, '', '', $data, 0, 1, 0, true, '', true); $filePath = $filename ....

    PHPConversion一个计量单位转换的PHP库单位和大小

    use Crisu83\Conversion\Unit\Length\UnitLength; ``` ### 单位转换的基本用法 PHP Conversion库提供了丰富的预定义单位和大小类,你可以创建相应的对象来进行转换。例如,转换长度单位: ```php $length = new ...

    采用PHP函数memory_get_usage获取PHP内存清耗量的方法

    $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb'); return round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . '' . $unit[$i]; } echo convert(memory_get_usage(true)); ?&gt; ``` 这个函数会根据...

    PDFTOTEXT.rar_WEB开发_PHP_

    总结来说,"PDFTOTEXT.rar"可能包含的是一个PHP实现的PDF转文本解决方案,利用了如`pdf2text`或`TCPDF`这样的工具或库。这个技术对于WEB开发者而言,尤其是在处理大量PDF数据时,能够极大地提高工作效率和数据处理...

    PHP人民币金额数字转中文大写的函数代码

    辅助函数`_cny_map_unit()`的主要作用是对数字进行分级,例如将"12345"转换为"一万二千三百四十五"。它遍历数字列表,根据当前数字和已处理的数字列表构建中文表示。同时,这个函数会处理"零"的情况,确保在非零数字...

    PHP把数字转成人民币大写的函数分享

    function rmb_format($money = 0, $int_unit = '元', $is_round = true, $is_extra_zero = false) { // ... } ``` - `$money`:这是要转换的数字,默认值为0。 - `$int_unit`:币种单位,默认为"元",但可根据需求...

    ecshop 2.0数据字典

    ECShop是一款基于PHP语言开发的开源电子商务系统,其2.0版本的数据字典涉及到的关键信息主要是关于商品管理和分类管理的数据库表结构。这些表对于理解ECShop如何存储和处理商品数据至关重要。 首先,我们来看商品...

    如何让你的php支持pdf生成png缩略图?

    `TCPDF`是一个PHP类库,用于创建和编辑PDF文档,它不直接支持PDF转PNG,但可以结合其他工具如`ImageMagick`来实现。而`Ghostscript`则是一个强大的PDF处理工具,可以直接将PDF转换为各种图像格式。 1. **安装依赖**...

    php源码:pdf操作类

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;SetCreator(PDF_CREATOR); $pdf-&gt;SetAuthor('作者名'); $pdf-&gt;SetTitle('文档标题'); $pdf-&gt;SetSubject('PDF...

    PHP网页生成PDF文件

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;SetCreator(PDF_CREATOR); $pdf-&gt;SetAuthor('Your Name'); $pdf-&gt;SetTitle('PDF Title'); $pdf-&gt;SetSubject('...

    html2pdf支持图片及中文

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;SetFont('stsongstdlight', '', 12, '', true); ``` 3. **HTML到PDF的转换**:HTML2PDF提供了一个`createPDF...

    pdf生成中文类库 php

    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf-&gt;SetCreator(PDF_CREATOR); $pdf-&gt;SetTitle('我的PDF文件'); $pdf-&gt;SetAuthor('作者'); $pdf-&gt;SetSubject('...

Global site tag (gtag.js) - Google Analytics