PHP單元測試工具PHPUnit初體驗

來源:互聯網
上載者:User
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.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.