History of TestingSuites

^__Note:__ I've just discovered the PEAR::PHPUnit, which I looked at previously and didn't understand. Now it appears that it is a more effective means of testing and I will be changing the following code to suit PHPUnit rather than the script mentioned below. - wolff_borg^

If you don't know about Object Orientation (OO) or 'Black Box' design, take a look at the ObjectOrientation page. Its probably also a good time to read ModelViewController to understand how all this fits together.

Under the __kernel/test/__ directory, you will find an attempt at our first testing suite. This is supposed to be a quick explanation on how it works.

The testing suite is based on the principles of Object Orientation or 'black box' design. The testing suite only cares about what could possibly go into a class, what if something not meant to go into the class is handled and will the output be the way you like it.

As OO uses a lot of inheritence, by changing something small in a base class, all child classes could be affected and break. Testing suites help prevent this. Also, if developers start putting data into the class, that was never meant for it, testing suites ensure that the class handles them gracefully, rather than die a horrible death.

Lastly, a testing suite also checks that the output is what you expected.

The testing script we use was written by [mailto:vincent@sunlight.tmfweb.nl|Vincent Oostindië], and can be found at [http://www.phppatterns.com/index.php/article/articleview/33/1/2/]. Its very simple in design and perfect for our need in TikiPro. You can find a copy of the script as __kernel/test/index.php__.

So, using our class from ObjectOrientation, I'll show you how to write a test class for it.

In a directory, place the __index.php__ script. Now, create a new file using the prefix Test - in this case ''TestMyClass.php''.

Some points to remember for test classes:
# The test scripts need to include the script they will be testing (obviously).
# Create one test class per test script, the class name being the same as the file name.
# All test classes must extend a class Test
# All methods within the test class beginning with the letters "test" will be executed by PHPUnit

So, for our class, this is what the test class would look like:
// get the class you're going to test
// always extend the Test class, which is already included from index.php
// always prefix the class name with 'Test'
class TestMyClass extends Test {
// this variable will hold our test class
var $test;
// initialise class and confirmed its setup correctly.
function TestMyClass() {
$this->test = new MyClass();
Assert::equalsTrue(isset($this->test), 'Error during initialisation');
// check if the initial value is 'not-set'
function testGetInitialValue() {
Assert::equalsTrue($this->test->getText() == "not-set", 'Default value is not correct');
// set value and test that it sets
function testSetValue() {
$this->test->setText("some test");
Assert::equalsTrue($this->test->getText() == "some text", 'Value is not set');
As you can see, its really not too hard. By browsing to the __index.php__ file, each of the Test* files and classes will be initialised and their results presented on the screen.

The next steps to this test class could be:
* what if you tried to set the text to NULL?
* what if you tried to set the text to ""?
Page History
11 Mar 2006 (11:48 UTC)
corrected typo
Uwe Zimmermann87.96.133.21914
Current • Source
Jan Lindåker81.229.122.24913
View • Compare • Difference • Source
Jan Lindåker192.16.134.6611
View • Compare • Difference • Source
Jan Lindåker81.226.206.1989
View • Compare • Difference • Source
Stephan Borg218.214.1.1138
View • Compare • Difference • Source
Stephan Borg218.214.1.1137
View • Compare • Difference • Source
Stephan Borg218.214.1.1136
View • Compare • Difference • Source
Stephan Borg218.214.1.1135
View • Compare • Difference • Source
Stephan Borg218.214.1.1134
View • Compare • Difference • Source
Stephan Borg218.214.1.1133
View • Compare • Difference • Source
Stephan Borg218.214.1.1132
View • Compare • Difference • Source