首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单元测试类 | Unit Testing Class

单元测试是软件开发的一种方法,其中为应用程序中的每个功能编写测试。如果你对这个概念不熟悉,你可以在这个主题上进行一些搜索。

CodeIgniter的单元测试类非常简单,包含一个评估函数和两个结果函数。它不是一个完整的测试套件,而是一个简单的机制来评估你的代码,以确定它是否产生正确的数据类型和结果。

  • 使用单元测试库
    • 初始化类
    • 运行测试
    • 生成报告
    • 严格模式
    • 启用/禁用单元测试
    • 单元测试显示
      • 定制显示的测试
      • 创建一个模板
  • 类参考

使用单元测试库

初始化类

像CodeIgniter中的大多数其他类一样,Unit Test类在您的控制器中使用$ this-> load-> library函数进行初始化:

代码语言:javascript
复制
$this->load->library('unit_test');

加载后,单元测试对象将可用 $this->unit

运行测试

运行测试包括以下列方式提供测试和预期结果:

$this->unit->run(‘test’, ‘expected result’, ‘test name’, ‘notes’);

测试是您希望测试的代码的结果,预期的结果是您期望的数据类型,测试名称是可以给您测试的可选名称,注释是可选注释。例:

代码语言:javascript
复制
$test = 1 + 1;

$expected_result = 2;

$test_name = 'Adds one plus one';

$this->unit->run($test, $expected_result, $test_name);

您提供的预期结果可以是文字匹配,也可以是数据类型匹配。这是一个文字的例子:

代码语言:javascript
复制
$this->unit->run('Foo', 'Foo');

这是一个数据类型匹配的例子:

代码语言:javascript
复制
$this->unit->run('Foo', 'is_string');

注意在第二个参数中使用“is_string”?这告诉函数来评估你的测试是否产生一个字符串作为结果。以下是允许的比较类型列表:

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

生成报告

您可以在每次测试后显示结果,也可以运行多个测试并在最后生成报告。要直接显示报告,只需回显或返回运行功能:

代码语言:javascript
复制
echo $this->unit->run($test, $expected_result);

要运行所有测试的完整报告,请使用以下命令:

代码语言:javascript
复制
echo $this->unit->report();

该报告将被格式化为HTML表格供查看。如果您更喜欢原始数据,则可以使用以下方法检索数组:

代码语言:javascript
复制
echo $this->unit->result();

严格模式

默认情况下,单元测试类会松散地评估文字匹配。考虑这个例子:

代码语言:javascript
复制
$this->unit->run(1, TRUE);

测试正在评估一个整数,但预期的结果是一个布尔值。但是,由于PHP数据松散,PHP会使用普通的相等性测试将上述代码评估为TRUE:

代码语言:javascript
复制
if (1 == TRUE) echo 'This evaluates as true';

如果你愿意,你可以把单元测试类放在严格模式下,它将比较数据类型和值:

代码语言:javascript
复制
if (1 === TRUE) echo 'This evaluates as FALSE';

要启用严格模式,请使用以

代码语言:javascript
复制
$this->unit->use_strict(TRUE);

启用/禁用单元测试

如果您想在脚本中保留一些测试,但是除非您需要,否则不会运行测试,您可以使用以下命令禁用单元测试:

代码语言:javascript
复制
$this->unit->active(FALSE);

单元测试显示

当您的单元测试结果显示时,下列项目默认显示:

  • 测试名称(test_name)
  • 测试数据类型(test_datatype)
  • 预期的数据类型(res_datatype)
  • 结果(结果)
  • 文件名(文件)
  • 行号(行)
  • 您为测试输入的任何笔记(笔记)

您可以使用$ this-> unit-> set_test_items()来自定义其中哪些项目显示。例如,如果您只想显示测试名称和结果:

定制显示的测试

代码语言:javascript
复制
$this->unit->set_test_items(array('test_name', 'result'));

创建一个模板

如果你希望你的测试结果格式不同,那么你可以设置你自己的模板。这是一个简单模板的例子。请注意所需的伪变量:

代码语言:javascript
复制
$str = '
<table border="0" cellpadding="4" cellspacing="1">
{rows}
        <tr>
                <td>{item}</td>
                <td>{result}</td>
        </tr>
{/rows}
</table>';

$this->unit->set_template($str);

注意

运行单元测试过程之前,必须声明您的模板。

类参考

class CI_Unit_testset_test_items($items)

参数:

$ items(array) - 可见测试项目列表

返回:

空虚

  • $ itemsarray) - 可见测试项目列表
代码语言:txt
复制
Returns:  void
代码语言:javascript
复制
设置应在测试中可见的项目列表。有效的选项是:
  • test_name
  • test_datatype
  • res_datatype
  • result
  • file
  • line
  • notes

run($test[, $expected = TRUE[, $test_name = 'undefined'[, $notes = '']]])

参数:

$ test(mixed) - 测试数据$ expected(混合) - 预期结果$ test_name(字符串) - 测试名称$ notes(字符串) - 任何要附加到测试的注释

返回:

测试报告

返回类型:

  • $ test混合) - 测试数据
  • $预期混合) - 预期结果
  • $ test_namestring) - 测试名称
  • $ notesstring) - 任何要附加到测试的注释
代码语言:txt
复制
Returns:  Test report
代码语言:txt
复制
Return type:  string
代码语言:txt
复制
Runs unit tests.

report([$result = array()])

参数:

$ result(array) - 包含测试结果的数组

返回:

测试报告

返回类型:

  • $ resultarray) - 包含测试结果的数组
代码语言:txt
复制
Returns:  Test report
代码语言:txt
复制
Return type:  string
代码语言:javascript
复制
生成关于已完成测试的报告。

use_strict([$state = TRUE])

参数:

$ state(bool) - 严格状态标志

返回类型:

空虚

  • $ statebool) - 严格状态标志
代码语言:txt
复制
Return type:  void
代码语言:txt
复制
Enables/disables strict type comparison in tests.

active([$state = TRUE])

参数:

$ state(bool) - 是否启用测试

返回类型:

void

  • $ statebool) - 是否启用测试
代码语言:txt
复制
Return type:  void
代码语言:javascript
复制
启用/禁用单元测试。

result([$results = array()])

参数:

$ results(array) - 测试结果列表

返回:

原始结果数据数组

返回类型:

排列

  • $ resultsarray) - 测试结果列表
代码语言:javascript
复制
返回:原始结果数据的数组
代码语言:txt
复制
Return type:  array
代码语言:javascript
复制
返回原始测试结果数据。

set_template($template)

参数:

$ template(string) - 测试结果模板

返回类型:

void

  • $ templatestring) - 测试结果模板
代码语言:txt
复制
Return type:  void
代码语言:javascript
复制
设置用于显示测试结果的模板。

扫码关注腾讯云开发者

领取腾讯云代金券