SimpleTest conversion
From MoodleDocs
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:
- create new test file in `xxx/tests/yyy_test.php`
- copy contents of the old test file
- replace
extends UnitTestCase
withextends basic_testcase
andextends UnitTestCaseUsingDatabase
withextends advanced_testcase
- move constructor code to setUp()
- fix setUp() and tearDown() to be protected
- fix assert syntax
- add
$this->resetAfterTest();
in advanced test cases that modify database - 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.
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).