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