Jump to content

Writing tests: Difference between revisions

From NusaATK
No edit summary
No edit summary
Line 71: Line 71:


[[Using a test database]]
[[Using a test database]]
[[Run tests]]


=== Overloaders ===
=== Overloaders ===

Revision as of 07:44, 14 May 2007

(This howto is a work in progress) To create a test you need to take the following steps:

Create a directory 'testcases' in your module directory.

In the directory you need to place one or more files with the name:

 class.test_[testnaam].inc

A test cases needs the following structure:

 require_once(moduleDir("[modulename]")."class.[class you want to test].inc");
 //Take for example the class 'class.example.inc'
 /**
  * Unittests for the example class
  *
  */
 class test_testcase_name extends atkTestCase 
 {
   //Warning: This is PHP5.
   public function __construct()
   {
     parent::__construct(); //Not necessary now, but maybe in the future.
     $this->addFixture('module.table'); //Fixtures need to be loaded in the constructor.
   }
   //This function will be called before all other test_* functions.
   function setUp()
   {
     //Don't forget to call the setUp of the parent.
     parent::setUp();
   }
   //This function will be called after all other test_* functions.
   function tearDown()
   {
     //Don't forget to call the teadDown of the parent.
     parent::tearDown();
   }
   //Simpele test function
   function test_doSomething()
   {
     //Do some stuff
     $class = new exampleclass();
     $class->doSomething();
     $result = $class->getSomeValue;
     $this->assertEqual($result,'expected_value','text in the test.');
   }
 }

The actual testing is done by the assert* functions. Here is a small list of the most used ones:

 assertNull($value, $message = "%s")
 assertIsA($object, $type, $message = "%s")
 assertEqual($first, $second, $message = "%s")
 assertIdentical($first, $second, $message = "%s")
 assertReference(&$first, &$second, $message = "%s")
 assertCopy(&$first, &$second, $message = "%s")
 assertWantedPattern($pattern, $subject, $message = "%s")
 assertNoUnwantedPattern($pattern, $subject, $message = "%s")
 assertNoErrors($message = "%s")
 assertError($expected = false, $message = "%s")
 assertErrorPattern($pattern, $message = "%s")
 assertTrue($result, $message = false)
 assertFalse($result, $message = false)

These can be found in the 'atk/test' directory.


More information:

Simpletest

Using a test database Run tests

Overloaders

Sometimes a function uses a class for which you need to do some extra setup, at that point it can be handy to use a 'mock' class which will return some default results. Then you can overload this class by using an overloader:

This only works when a class is loaded with atkNew().

An example:

 function test_aclass()
 {
   // I know this function uses atkSoap, but we don't want to use it for this test
   atkClassLoader::addOverloader("atk.utils.atksoap", "mycustomsoapstub");
   $result = afunction();
   $this->assertEqual($result, "blabla", "result should be blabla");
 }