Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

SimpleTest conversion: Difference between revisions

From MoodleDocs
Line 16: Line 16:
Usually the tests using database can be significantly simplified, the performance in PHPUnit is also a lot better.
Usually the tests using database can be significantly simplified, the performance in PHPUnit is also a lot better.


The old SimpleTest execution page is hidden in 2.3, if you want to execute the old tests go to http://www.yoursite.com/admin/tool/unittest/index.php page on your server.
The old SimpleTest execution page is hidden in 2.3, if you want to execute the old tests go to http://www.example.com/admin/tool/unittest/index.php page on your server.


=Assert differences=
=Assert differences=

Revision as of 07:34, 13 October 2012

Moodle 2.3


Overview

Moodle 2.3 switched to PHPUnit as the recommended unit testing framework. SimpleTest support will be completely removed from Moodle 2.4.

The migration is pretty straightforward:

  1. create new test file in `xxx/tests/yyy_test.php`
  2. copy contents of the old test file
  3. replace extends UnitTestCase with extends basic_testcase and extends UnitTestCaseUsingDatabase with extends advanced_testcase
  4. move constructor code to setUp()
  5. fix setUp() and tearDown() to be protected
  6. fix assert syntax
  7. add $this->resetAfterTest(); in advanced test cases that modify database
  8. add missing global $CFG; for includes outside of testcase classes

Usually the tests using database can be significantly simplified, the performance in PHPUnit is also a lot better.

The old SimpleTest execution page is hidden in 2.3, if you want to execute the old tests go to http://www.example.com/admin/tool/unittest/index.php page on your server.

Assert differences

SimpleTest PHPUnit Notes
$this->assertEqual($expected, $actual) $this->assertEquals($expected, $actual)
$this->assertNotEqual($expected, $actual) $this->assertNotEquals($expected, $actual)
$this->assertWithinMargin($expected, $actual, $margin) $this->assertEquals($expected, $actual, , $margin)
$this->assertIdentical($expected, $actual) $this->assertSame($expected, $actual)
$this->assertNotIdentical($expected, $actual) $this->assertNotSame($expected, $actual)
$this->assertTrue($actual) $this->assertTrue((bool)$actual)
$this->assertNotEmpty($actual)
SimpleTest converts parameter to bool
$this->assertFalse($actual) $this->assertFalse((bool)$actual)
$this->assertEmpty($actual)
SimpleTest converts parameter to bool
$this->assertIsA($actual, 'classname') $this->assertInstanceOf('classname', $actual) objects instances only
$this->assertIsA($actual, 'array') $this->assertEquals('array', gettype($actual)) arrays only
$this->assertPattern($pattern, $string) $this->assertRegExp($pattern, $string)
$this->assertNoPattern($pattern, $string) $this->assertNotRegExp($pattern, $string)
$this->expectException(true) $this->setExpectedException('exception_classname') alternatively use phpdocs: @expectedException exception_classname
$this->expectError() $this->setExpectedException('PHPUnit_Framework_Error') alternatively use phpdocs: @expectedException PHPUnit_Framework_Error
various HTML expectations $this->assertTag()

SimpleTest emulation

Some original SimpleTests can be executed directly via PHPUnit with minimal modifications (try adding global $CFG for includes outside of test case class).