CodeIgniter 單元測(cè)試類(lèi)

2018-07-21 15:40 更新

單元測(cè)試類(lèi)

單元測(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é)果。

使用單元測(cè)試類(lèi)庫(kù)

初始化類(lèi)

正如 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)行測(cè)試

要運(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)型的列表:

  • is_object
  • is_string
  • is_bool
  • is_true
  • is_false
  • is_int
  • is_numeric
  • is_float
  • is_double
  • is_array
  • is_null
  • is_resource

生成報(bào)告

你可以在每個(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();

嚴(yán)格模式

默認(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è)試

如果你希望在你的代碼中保留一些測(cè)試,只在需要的時(shí)候才被執(zhí)行,可以使用下面的代碼禁用單元測(cè)試:

$this->unit->active(FALSE);

單元測(cè)試結(jié)果顯示

單元測(cè)試的結(jié)果默認(rèn)顯示如下幾項(xiàng):

  • Test Name (test_name)
  • Test Datatype (test_datatype)
  • Expected Datatype (res_datatype)
  • Result (result)
  • File Name (file)
  • Line Number (line)
  • Any notes you entered for the test (notes)

你可以使用 $this->unit->set_test_items() 方法自定義要顯示哪些結(jié)果,例如, 你只想顯示出測(cè)試名和測(cè)試的結(jié)果:

自定義顯示測(cè)試結(jié)果

$this->unit->set_test_items(array('test_name', 'result'));

創(chuàng)建模板

如果你想讓你的測(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è)試 之前 被定義。

類(lèi)參考

classCI_Unit_test

set_test_items($items)

參數(shù):

  • $items (array) -- List of visible test items

返回: 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 (mixed) -- Test data
  • $expected (mixed) -- Expected result
  • $test_name (string) -- Test name
  • $notes (string) -- Any notes to be attached to the test

返回: Test report

返回類(lèi)型: string

運(yùn)行單元測(cè)試。

report([$result = array()])

參數(shù):

  • $result (array) -- Array containing tests results

返回: Test report

返回類(lèi)型: string

根據(jù)已運(yùn)行的測(cè)試生成一份測(cè)試結(jié)果的報(bào)告。

use_strict([$state = TRUE])

參數(shù):

  • $state (bool) -- Strict state flag

返回類(lèi)型: void

在測(cè)試中啟用或禁用嚴(yán)格比較模式。

active([$state = TRUE])

參數(shù):

  • $state (bool) -- Whether to enable testing

返回類(lèi)型: void

啟用或禁用單元測(cè)試。

result([$results = array()])

參數(shù):

  • $results (array) -- Tests results list

返回: Array of raw result data

返回類(lèi)型: array

返回原始的測(cè)試結(jié)果數(shù)據(jù)。

set_template($template)

參數(shù):

  • $template (string) -- Test result template

返回類(lèi)型: void

設(shè)置顯示測(cè)試結(jié)果數(shù)據(jù)的模板。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)