W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
單元測(cè)試是一種為你的應(yīng)用程序中的每個(gè)函數(shù)編寫(xiě)測(cè)試的軟件開(kāi)發(fā)方法。如果你還不熟悉這個(gè)概念, 你應(yīng)該先去 Google 一下。
CodeIgniter 的單元測(cè)試類(lèi)非常簡(jiǎn)單,由一個(gè)測(cè)試方法和兩個(gè)顯示結(jié)果的方法組成。 它沒(méi)打算成為一個(gè)完整的測(cè)試套件,只是提供一個(gè)簡(jiǎn)單的機(jī)制來(lái)測(cè)試你的代碼是否 生成了正確的數(shù)據(jù)類(lèi)型和結(jié)果。
正如 CodeIgniter 中的其他類(lèi)一樣,在你的控制器中使用 $this->load->library() 方法來(lái)初始化單元測(cè)試類(lèi):
$this->load->library('unit_test');
初始化之后,單元測(cè)試類(lèi)的對(duì)象就可以這樣訪問(wèn):
$this->unit
要運(yùn)行一個(gè)測(cè)試用例,需要提供一個(gè)測(cè)試和一個(gè)期望結(jié)果,像下面這樣:
$this->unit->run('test', 'expected result', 'test name', 'notes');
其中,test 是你希望測(cè)試的代碼的結(jié)果,expected result 是期望返回的結(jié)果,test name 是可選的, 你可以為你的測(cè)試取一個(gè)名字,notes 是可選的,可以填些備注信息。例如:
$test = 1 + 1;
$expected_result = 2;
$test_name = 'Adds one plus one';
$this->unit->run($test, $expected_result, $test_name);
期望的結(jié)果可以是字面量匹配(a literal match),也可以是數(shù)據(jù)類(lèi)型匹配(a data type match)。 下面是字面量匹配的例子:
$this->unit->run('Foo', 'Foo');
下面是數(shù)據(jù)類(lèi)型匹配的例子:
$this->unit->run('Foo', 'is_string');
注意第二個(gè)參數(shù) "is_string" ,這讓方法測(cè)試返回的結(jié)果是否是字符串類(lèi)型。以下是可用的數(shù)據(jù)類(lèi)型的列表:
你可以在每個(gè)測(cè)試之后顯示出測(cè)試的結(jié)果,也可以先運(yùn)行幾個(gè)測(cè)試,然后在最后生成一份測(cè)試結(jié)果的報(bào)告。 要簡(jiǎn)單的顯示出測(cè)試結(jié)果,可以直接在 run 方法的前面使用 echo:
echo $this->unit->run($test, $expected_result);
要顯示一份所有測(cè)試的完整報(bào)告,使用如下代碼:
echo $this->unit->report();
這份報(bào)告會(huì)以 HTML 的表格形式顯示出來(lái),如果你喜歡獲取原始的數(shù)據(jù),可以通過(guò)下面的代碼得到一個(gè)數(shù)組:
echo $this->unit->result();
默認(rèn)情況下,單元測(cè)試類(lèi)在字面量匹配時(shí)是松散的類(lèi)型匹配。看下面這個(gè)例子:
$this->unit->run(1, TRUE);
正在測(cè)試的結(jié)果是一個(gè)數(shù)字,期望的結(jié)果是一個(gè)布爾型。但是,由于 PHP 的松散數(shù)據(jù)類(lèi)型, 如果使用常規(guī)的比較操作符的話(huà),上面的測(cè)試結(jié)果將會(huì)是 TRUE 。
if (1 == TRUE) echo 'This evaluates as true';
如果愿意的話(huà),你可以將單元測(cè)試設(shè)置為嚴(yán)格模式,它不僅會(huì)比較兩個(gè)數(shù)據(jù)的值, 而且還會(huì)比較兩個(gè)數(shù)據(jù)的數(shù)據(jù)類(lèi)型:
if (1 === TRUE) echo 'This evaluates as FALSE';
使用如下代碼啟用嚴(yán)格模式:
$this->unit->use_strict(TRUE);
如果你希望在你的代碼中保留一些測(cè)試,只在需要的時(shí)候才被執(zhí)行,可以使用下面的代碼禁用單元測(cè)試:
$this->unit->active(FALSE);
單元測(cè)試的結(jié)果默認(rèn)顯示如下幾項(xiàng):
你可以使用 $this->unit->set_test_items() 方法自定義要顯示哪些結(jié)果,例如, 你只想顯示出測(cè)試名和測(cè)試的結(jié)果:
$this->unit->set_test_items(array('test_name', 'result'));
如果你想讓你的測(cè)試結(jié)果以不同于默認(rèn)的格式顯示出來(lái),你可以設(shè)置你自己的模板, 這里是一個(gè)簡(jiǎn)單的模板例子,注意那些必須的偽變量:
$str = '
<table border="0" cellpadding="4" cellspacing="1">
{rows}
<tr>
<td>{item}</td>
<td>{result}</td>
</tr>
{/rows}
</table>';
$this->unit->set_template($str);
注解
你的模板必須在運(yùn)行測(cè)試 之前 被定義。
classCI_Unit_test
set_test_items($items)
參數(shù):
返回: void
設(shè)置要在測(cè)試的結(jié)果中顯示哪些項(xiàng),有效的選項(xiàng)有:
- test_name
- test_datatype
- res_datatype
- result
- file
- line
- notes
run($test[, $expected = TRUE[, $test_name = 'undefined'[, $notes = '']]])
參數(shù):
返回: Test report
返回類(lèi)型: string
運(yùn)行單元測(cè)試。
report([$result = array()])
參數(shù):
返回: Test report
返回類(lèi)型: string
根據(jù)已運(yùn)行的測(cè)試生成一份測(cè)試結(jié)果的報(bào)告。
use_strict([$state = TRUE])
參數(shù):
返回類(lèi)型: void
在測(cè)試中啟用或禁用嚴(yán)格比較模式。
active([$state = TRUE])
參數(shù):
返回類(lèi)型: void
啟用或禁用單元測(cè)試。
result([$results = array()])
參數(shù):
返回: Array of raw result data
返回類(lèi)型: array
返回原始的測(cè)試結(jié)果數(shù)據(jù)。
set_template($template)
參數(shù):
返回類(lèi)型: void
設(shè)置顯示測(cè)試結(jié)果數(shù)據(jù)的模板。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: