I’ve used the simpletest PHP unit test framework and as Moodle uses the simpletest, I thought that setting up unit tests and running them would be straightforward. As with a lot of things Moodle, there are various gotchas which are not documented and it was only by searching through the source code that I was able to get them running.
I set up a unit test class and ran it through Site Administration -> Development -> Unit Tests. The first thing that went wrong was it complained that unittestprefix had not been set. A search through the source revealed that this variable refers the prefix you need to use on the test tables in the Moodle database. In my config.php, the setting was
//Unit testing. //This refers to the prefix for the test tables in the database $CFG->unittestprefix = 'testing_';
The next problem was that Moodle couldn’t find my unit tests. It took a bit of digging but I found that I had prefix the name the php file with the unit test with ‘test_’. After that, my tests worked OK.
if (!defined('MOODLE_INTERNAL')) { /// It must be included from a Moodle page die('Direct access to this script is forbidden.'); } global $DB, $CFG; class test_block_rollover_clone_test extends UnitTestCase { public function testInitialTesting() { $this->assertFalse(true); } }
This resulted in the following: