Writing a Unit Test

Before we begin to write our business logic and code, we shall proceed with the path of test driven development (TDD), or at least take some part of that process.

Unit testing is a useful tool when we want to start to test our individual business logic classes. The tests/unit directory will be used to hold the unit test cases and tests/functional directory to hold the function test cases.

Write a unit test case

We will start be writing a very simple unit test case. Notice that we are writing the test case first.

<?php class ProjectTestCase extends UnitTestCase { function testProjectClassExists() { $project = new Project(); $this->pass(); } } ?>

Save the code as ProjectTestCase.php in the document_root/time-tracker/tests/unit/ directory.

Run your first unit test case from your browser

Point your browser to your development server's unit test case runner, e.g. http://web-server-address/time-tracker/tests/unit.php. You should see the following

Figure 1: Unit test runner

Clicking on the ProjectTestCase.php link, you should see

Figure 2: Unit test failure

Smallest step to make the test pass.

Since we only wrote the test case and nothing else we expected that the test case will fail at some point. Obviously, we need create a class Project, so lets define the Project class.

<?php class Project { } ?>

We save the above code as time-tracker/protected/pages/APP_CODE/Project.php. Where the APP_CODE directory will contain most of the business logic code for the Time Tracker application.

Now, we also need to add the following line in our test case so as to include the Project class file when running the tests.

<?php Prado::using('Application.APP_CODE.Project'); class ProjectTestCase extends UnitTestCase { ... } ?>
Info: The statement Prado::using('Application.APP_CODE.Project') basically loads the Project.php class file. It assumes that a class name Project has filename Project.php. For futher details regarding Prado::using can be found in Prado Namespaces documentation.

Run the unit test runner again, we see that the test has passed.

Figure 3: Unit test success

Later on, we shall write more test cases. See the SimpleTest documentation for detailed tutorial on writing test cases.