Unit Testing

Unit testing helps create a more solid code base. The purpose of this article is to explain unit testing as it relates to FreePBX.

Location and Naming

Unit tests should be located in a utests folder in the root of the module. All tests should end with Test.php. Example fooAddTest.php.

|_mymodule

 ...

   |_utests

      |_fooAddTest.php

Sample Code

The actual Test to be run. Leave the top comment intact as it serves a functional purpose in phpunit

fooAddTest.php

<?php   /**   * https://blogs.kent.ac.uk/webdev/2011/07/14/phpunit-and-unserialized-pdo-instances/   * @backupGlobals disabled   */   class fooAddTest extends PHPUnit_Framework_TestCase{     //Will be FreePBX BMO object     protected static $f;     //Will become your Class object     protected static $o;     //Module name used in test output as self::$module. Can be anything unless you want to use this as something more.     protected static $module = 'Modulename';     //Change Moduleclass to your class name     public static function setUpBeforeClass() {         self::$f = FreePBX::create();         self::$o = self::$f->Moduleclass;     }     //Stuff before the test     public function setup() {}       //NOTE: ALL THE TESTS THAT YOU WANT TO BE TESTED MUST BE PUBLIC ONES     //Leave this alone, it test that PHPUnit is working     public function testPHPUnit() {         $this->assertEquals("test", "test", "PHPUnit is broken.");         $this->assertNotEquals("test", "nottest", "PHPUnit is broken.");     }       //This tests that the the BMO object for your class is an object     public function testCreate() {         $this->assertTrue(is_object(self::$o), sprintf("Did not get a %s object",self::$module));     }     //This can be renamed to anything. Any method starting with "test" will be a test     public function testOne(){       /*do stuff test stuff here*/     } }

Running your test

Run the following command from your module root.

../../devtools/phpunit.php [--skipfreepbxbootstrap] [--moddir=<module directory if not in a module already>]
  • skipfreepbxbootstrap - Skip loading FreePBX Framework for the unit test. Otherwise load FreePBX around the unit test. If this is not set your system has to have a fully functioning FreePBX and Asterisk setup.

  • moddir - If you are not running phpunit.php inside of the same module directory you intend to run it against you need to define the module directory

PHPUnit Docs

Return to Documentation Home I Return to Sangoma Support