245 lines
5.9 KiB
ReStructuredText
245 lines
5.9 KiB
ReStructuredText
##################
|
|
Unit Testing Class
|
|
##################
|
|
|
|
Unit testing is an approach to software development in which tests are
|
|
written for each function in your application. If you are not familiar
|
|
with the concept you might do a little googling on the subject.
|
|
|
|
CodeIgniter's Unit Test class is quite simple, consisting of an
|
|
evaluation function and two result functions. It's not intended to be a
|
|
full-blown test suite but rather a simple mechanism to evaluate your
|
|
code to determine if it is producing the correct data type and result.
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
.. raw:: html
|
|
|
|
<div class="custom-index container"></div>
|
|
|
|
******************************
|
|
Using the Unit Testing Library
|
|
******************************
|
|
|
|
Initializing the Class
|
|
======================
|
|
|
|
Like most other classes in CodeIgniter, the Unit Test class is
|
|
initialized in your controller using the $this->load->library function::
|
|
|
|
$this->load->library('unit_test');
|
|
|
|
Once loaded, the Unit Test object will be available using ``$this->unit``
|
|
|
|
Running Tests
|
|
=============
|
|
|
|
Running a test involves supplying a test and an expected result in the
|
|
following way:
|
|
|
|
$this->unit->run('test', 'expected result', 'test name', 'notes');
|
|
|
|
Where test is the result of the code you wish to test, expected result
|
|
is the data type you expect, test name is an optional name you can give
|
|
your test, and notes are optional notes. Example::
|
|
|
|
$test = 1 + 1;
|
|
|
|
$expected_result = 2;
|
|
|
|
$test_name = 'Adds one plus one';
|
|
|
|
$this->unit->run($test, $expected_result, $test_name);
|
|
|
|
The expected result you supply can either be a literal match, or a data
|
|
type match. Here's an example of a literal::
|
|
|
|
$this->unit->run('Foo', 'Foo');
|
|
|
|
Here is an example of a data type match::
|
|
|
|
$this->unit->run('Foo', 'is_string');
|
|
|
|
Notice the use of "is_string" in the second parameter? This tells the
|
|
function to evaluate whether your test is producing a string as the
|
|
result. Here is a list of allowed comparison types:
|
|
|
|
- is_object
|
|
- is_string
|
|
- is_bool
|
|
- is_true
|
|
- is_false
|
|
- is_int
|
|
- is_numeric
|
|
- is_float
|
|
- is_double
|
|
- is_array
|
|
- is_null
|
|
- is_resource
|
|
|
|
Generating Reports
|
|
==================
|
|
|
|
You can either display results after each test, or your can run several
|
|
tests and generate a report at the end. To show a report directly simply
|
|
echo or return the run function::
|
|
|
|
echo $this->unit->run($test, $expected_result);
|
|
|
|
To run a full report of all tests, use this::
|
|
|
|
echo $this->unit->report();
|
|
|
|
The report will be formatted in an HTML table for viewing. If you prefer
|
|
the raw data you can retrieve an array using::
|
|
|
|
echo $this->unit->result();
|
|
|
|
Strict Mode
|
|
===========
|
|
|
|
By default the unit test class evaluates literal matches loosely.
|
|
Consider this example::
|
|
|
|
$this->unit->run(1, TRUE);
|
|
|
|
The test is evaluating an integer, but the expected result is a boolean.
|
|
PHP, however, due to it's loose data-typing will evaluate the above code
|
|
as TRUE using a normal equality test::
|
|
|
|
if (1 == TRUE) echo 'This evaluates as true';
|
|
|
|
If you prefer, you can put the unit test class in to strict mode, which
|
|
will compare the data type as well as the value::
|
|
|
|
if (1 === TRUE) echo 'This evaluates as FALSE';
|
|
|
|
To enable strict mode use this::
|
|
|
|
$this->unit->use_strict(TRUE);
|
|
|
|
Enabling/Disabling Unit Testing
|
|
===============================
|
|
|
|
If you would like to leave some testing in place in your scripts, but
|
|
not have it run unless you need it, you can disable unit testing using::
|
|
|
|
$this->unit->active(FALSE);
|
|
|
|
Unit Test Display
|
|
=================
|
|
|
|
When your unit test results display, the following items show by
|
|
default:
|
|
|
|
- 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)
|
|
|
|
You can customize which of these items get displayed by using
|
|
$this->unit->set_test_items(). For example, if you only wanted the test name
|
|
and the result displayed:
|
|
|
|
Customizing displayed tests
|
|
---------------------------
|
|
|
|
::
|
|
|
|
$this->unit->set_test_items(array('test_name', 'result'));
|
|
|
|
Creating a Template
|
|
-------------------
|
|
|
|
If you would like your test results formatted differently then the
|
|
default you can set your own template. Here is an example of a simple
|
|
template. Note the required pseudo-variables::
|
|
|
|
$str = '
|
|
<table border="0" cellpadding="4" cellspacing="1">
|
|
{rows}
|
|
<tr>
|
|
<td>{item}</td>
|
|
<td>{result}</td>
|
|
</tr>
|
|
{/rows}
|
|
</table>';
|
|
|
|
$this->unit->set_template($str);
|
|
|
|
.. note:: Your template must be declared **before** running the unit
|
|
test process.
|
|
|
|
***************
|
|
Class Reference
|
|
***************
|
|
|
|
.. php:class:: CI_Unit_test
|
|
|
|
.. php:method:: set_test_items($items)
|
|
|
|
:param array $items: List of visible test items
|
|
:returns: void
|
|
|
|
Sets a list of items that should be visible in tests.
|
|
Valid options are:
|
|
|
|
- test_name
|
|
- test_datatype
|
|
- res_datatype
|
|
- result
|
|
- file
|
|
- line
|
|
- notes
|
|
|
|
.. php:method:: run($test[, $expected = TRUE[, $test_name = 'undefined'[, $notes = '']]])
|
|
|
|
:param mixed $test: Test data
|
|
:param mixed $expected: Expected result
|
|
:param string $test_name: Test name
|
|
:param string $notes: Any notes to be attached to the test
|
|
:returns: Test report
|
|
:rtype: string
|
|
|
|
Runs unit tests.
|
|
|
|
.. php:method:: report([$result = array()])
|
|
|
|
:param array $result: Array containing tests results
|
|
:returns: Test report
|
|
:rtype: string
|
|
|
|
Generates a report about already complete tests.
|
|
|
|
.. php:method:: use_strict([$state = TRUE])
|
|
|
|
:param bool $state: Strict state flag
|
|
:rtype: void
|
|
|
|
Enables/disables strict type comparison in tests.
|
|
|
|
.. php:method:: active([$state = TRUE])
|
|
|
|
:param bool $state: Whether to enable testing
|
|
:rtype: void
|
|
|
|
Enables/disables unit testing.
|
|
|
|
.. php:method:: result([$results = array()])
|
|
|
|
:param array $results: Tests results list
|
|
:returns: Array of raw result data
|
|
:rtype: array
|
|
|
|
Returns raw tests results data.
|
|
|
|
.. php:method:: set_template($template)
|
|
|
|
:param string $template: Test result template
|
|
:rtype: void
|
|
|
|
Sets the template for displaying tests results. |