SImpleTest是一套用來作PHP程式測試的架構,雖然我很早就知道這東西,不過一直沒有用它。
最近開始在做自己用的程式庫,所以就用它來作自動測試。
架構上我希望測試用的程式碼跟程式庫本身分開,所以目錄我是這麼安排的:
├─[lib]
├─test
├─simpletest
└─case
[lib]:程式庫目錄
test:測試用目錄
simpletest:SimpleTest的程式碼
case:測試程式集
在 test 底下有一個 index.php ,用來引入 case 底下所有的 .php 測試用的程式碼,
這裡假設[lib]的名稱叫做losttech,你可以根據你自己設定的目錄名稱更改,修改 define 那一行就對了。
index.php 內容如下:
<?php
mb_internal_encoding('UTF-8');
$目錄 = dirname(__FILE__);
define ('引用', $目錄 . '/../losttech/');
require_once $目錄 . '/simpletest/unit_tester.php';
require_once $目錄 . '/simpletest/collector.php';
require_once $目錄 . '/simpletest/reporter.php';
主程式();
function 主程式(){
global $目錄;
$測試 = &new GroupTest('測試報告');
$測試->collect($目錄 . '/case/', new SimplePatternCollector());
$測試->run(new HtmlReporter('UTF-8'));
unset($測試);
}
?>
這裡有一個範例,我寫了一個函式叫做「字元陣列」,用途是把一個一串拆成一個一個的字元陣列。
我把它放到 losttech/string.php ,內容如下:
<?php
function 字元陣列($字串, $長度 = 1) {
$輸出 = array();
if ($長度 < 1) {
return $輸出;
}
for ($索引 = 0; $索引 < mb_strlen($字串); $索引 += $長度) {
$輸出[] = mb_substr($字串, $索引, $長度);
}
return $輸出;
}
?>
測試用的程式碼,我把它放到 test/case/string.php,這裡我故意讓它的檔名跟要引用的檔名相同。
內容如下:
<?php
require_once 引用 . 'class/' . basename(__FILE__);
class 測試:字元陣列 extends UnitTestCase {
function testCreation(){
$測試陣列 = array(
'' => array(),
'1' => array('1'),
'一' => array('一'),
'123' => array('1','2','3'),
'一二三' => array('一','二','三'),
);
foreach($測試陣列 as $測試 => $結果) {
$this->assertEqual($結果, 字元陣列($測試), "測試:$測試");
}
}
}
?>
測試結果:
這裡有個重點,就是把要測試的程式碼放到以 test 開頭的成員函數(例如:testEmail, testLogin等等,總之必須是 test 開頭)裡面來,這樣才會進行自動測試。
最近開始在做自己用的程式庫,所以就用它來作自動測試。
架構上我希望測試用的程式碼跟程式庫本身分開,所以目錄我是這麼安排的:
├─[lib]
├─test
├─simpletest
└─case
[lib]:程式庫目錄
test:測試用目錄
simpletest:SimpleTest的程式碼
case:測試程式集
在 test 底下有一個 index.php ,用來引入 case 底下所有的 .php 測試用的程式碼,
這裡假設[lib]的名稱叫做losttech,你可以根據你自己設定的目錄名稱更改,修改 define 那一行就對了。
index.php 內容如下:
<?php
mb_internal_encoding('UTF-8');
$目錄 = dirname(__FILE__);
define ('引用', $目錄 . '/../losttech/');
require_once $目錄 . '/simpletest/unit_tester.php';
require_once $目錄 . '/simpletest/collector.php';
require_once $目錄 . '/simpletest/reporter.php';
主程式();
function 主程式(){
global $目錄;
$測試 = &new GroupTest('測試報告');
$測試->collect($目錄 . '/case/', new SimplePatternCollector());
$測試->run(new HtmlReporter('UTF-8'));
unset($測試);
}
?>
這裡有一個範例,我寫了一個函式叫做「字元陣列」,用途是把一個一串拆成一個一個的字元陣列。
我把它放到 losttech/string.php ,內容如下:
<?php
function 字元陣列($字串, $長度 = 1) {
$輸出 = array();
if ($長度 < 1) {
return $輸出;
}
for ($索引 = 0; $索引 < mb_strlen($字串); $索引 += $長度) {
$輸出[] = mb_substr($字串, $索引, $長度);
}
return $輸出;
}
?>
測試用的程式碼,我把它放到 test/case/string.php,這裡我故意讓它的檔名跟要引用的檔名相同。
內容如下:
<?php
require_once 引用 . 'class/' . basename(__FILE__);
class 測試:字元陣列 extends UnitTestCase {
function testCreation(){
$測試陣列 = array(
'' => array(),
'1' => array('1'),
'一' => array('一'),
'123' => array('1','2','3'),
'一二三' => array('一','二','三'),
);
foreach($測試陣列 as $測試 => $結果) {
$this->assertEqual($結果, 字元陣列($測試), "測試:$測試");
}
}
}
?>
測試結果:
測試報告
1/1 test cases complete: 5 passes, 0 fail這裡有個重點,就是把要測試的程式碼放到以 test 開頭的成員函數(例如:testEmail, testLogin等等,總之必須是 test 開頭)裡面來,這樣才會進行自動測試。
全站熱搜
留言列表